I can't get MFMailComposeViewController to open without throwing a fatal error in iOS 9 Simulator.
The same code (Objective C) works flawlessly in iOS 8.x and lower but today I installed Xcode 7 beta 5 and when I run the app on iOS 9 Simulator, I get a dialog box titled "MailCompositionService quit unexpectedly" and when I view the error report, I see:
Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x7fd314280b10'
terminating with uncaught exception of type NSException abort() called CoreSimulator 179 - Device: iPhone 6 - Runtime: iOS 9.0 (13A4325c) - DeviceType: iPhone 6
The error happens when the mail composition view comes up. It freezes for a few seconds and then the error dialog box comes up.
The code that opens the mail composition view is:
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Comment title"];
[picker setMessageBody:@"Comment description" isHTML:NO];
[self.window.rootViewController presentModalViewController:picker animated:YES];
[picker release];
}
If it helps to know, before the app crashes, mailComposeController:didFinishWithResult:error:
is called with result
= MFMailComposeResultCancelled
and error
= nil
.
I'd appreciate tips on how to find the cause of this error. Thanks!
You should use :
[self.window.rootViewController presentViewController:picker animated:YES completion:NULL];
presentModalViewController is DEPRECATED since ios6 is and has been replaced bypresentViewController:animated:completion:
ie: -(void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
I have no idea why it happens or how did I discovered it, the crash seems to be generated by setting the NSFontAttributeName in the Appearance proxy for the navigation bar, if I uncomment that line the app crashes.
Please @Sleiman try and see if this fixes the issue for you too.
The issue is with simulator, on the real device mail composer is working correctly.
As per Apple Developer Forum, more details are here.
As a simple work around for this problem, you can use "mailto" protocol, it will:
Example in swift:
Swift 3.0
Swift 2.3