代码之家  ›  专栏  ›  技术社区  ›  Neal L

mfmailcomposiewcontroller挂起我的应用程序

  •  2
  • Neal L  · 技术社区  · 15 年前

    我正在尝试将电子邮件功能添加到我的应用程序中。我可以让mfmailcomposiewcontroller正确显示并预填充其主题和正文,但由于某些原因,当用户单击导航栏中的“取消”或“发送”按钮时,应用程序将挂起。我在 mailComposeController"didFinishWithResult:error 它甚至不会把那一行打印到控制台上。

    有人知道什么会导致mfmailcomposiewcontroller那样挂起吗?

    这是我头上的代码:

    #import "ManagedObjectEditor.h"
    #import <MessageUI/MessageUI.h>
    
    @interface MyManagedObjectEditor : ManagedObjectEditor 
        <MFMailComposeViewControllerDelegate, UIImagePickerControllerDelegate,
         UINavigationControllerDelegate> {
    }
    
    - (IBAction)emailObject;
    @end
    

    从实现文件:

    if ([MFMailComposeViewController canSendMail]) {        
        MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
        mailComposer.delegate = self;
        [mailComposer setSubject:NSLocalizedString(@"An email from me",
                                                   @"An email from me")];
        [mailComposer setMessageBody:emailString
                              isHTML:YES];
        [self presentModalViewController:mailComposer animated:YES];
        [mailComposer release];
    }
    [error release];
    [emailString release];
    

    下面是回调的代码:

    #pragma mark -
    #pragma mark Mail Compose Delegate Methods
    - (void)mailComposeController:(MFMailComposeViewController *)controller 
              didFinishWithResult:(MFMailComposeResult)result 
                            error:(NSError *)error {
        NSLog(@"in didFinishWithResult:");
        switch (result) {
            case MFMailComposeResultCancelled:
                NSLog(@"cancelled");
                break;
            case MFMailComposeResultSaved:
                NSLog(@"saved");
                break;
            case MFMailComposeResultSent:
                NSLog(@"sent");
                break;
            case MFMailComposeResultFailed: {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error sending email!",@"Error sending email!")
                                                                message:[error localizedDescription]
                                                               delegate:nil
                                                      cancelButtonTitle:NSLocalizedString(@"Bummer",@"Bummer")
                                                      otherButtonTitles:nil];
                [alert show];
                [alert release];
                break;
            }
            default:
                break;
        }
        [self dismissModalViewControllerAnimated:YES];
    }
    

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  6
  •   Ben Gottlieb    15 年前

    我也受了点影响,你需要设置mailcomposedelegate,而不是代理。