开发者

Release MFMAilComposeViewController after presentModalViewController: crashes

开发者 https://www.devze.com 2023-02-15 01:36 出处:网络
I have the following block of code which works fine in the simulator and on most devices, on some devices however (all on the same iOS version 4.2.1) the app is crashing when it gets to the [mailCompo

I have the following block of code which works fine in the simulator and on most devices, on some devices however (all on the same iOS version 4.2.1) the app is crashing when it gets to the [mailComposer release] call, does anyone have any insight on why this would be happening?

    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:[self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]];
    [mailComposer setMessageBody:[NSString stringWithFormat:@"Hello, \n\n Here is the link we discussed. \n %@", 开发者_如何学编程[self.webView.request URL]] isHTML:NO];
    [self presentModalViewController:mailComposer animated:YES];
    [mailComposer release];


I had this exact same problem and I really have NO idea why it would crash, because presentModalViewController is supposed to retain the view controller. After fighting with it, I finally just added a property on my view controller which retained the reference to the mfMailComposeViewController and it worked fine. :/

MFMailComposeViewController* mfMailComposeViewController;
@property (nonatomic, retain) MFMailComposeViewController *mfMailComposeViewController;

then..

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:subject];
[controller setBody:body];
self.mfMailComposeViewController = controller;
[controller release];


Ok so I managed to figure out what was causing my issue with the help of my new iPad 2.

The issue was caused by not having any mail accounts configured, simply adding

if ([MFMailComposeViewController canSendMail])

before I create and present the view prevents the crashing, in my else block I added an UIAlertView to let the user know they cannot access that feature without first configuring a mail account.

0

精彩评论

暂无评论...
验证码 换一张
取 消