我无法打开MFMailComposeViewController而不会在iOS 9模拟器中抛出致命错误。
相同的代码(目标C)在iOS 8.x及更低版本中完美运行但今天我安装了Xcode 7 beta 5,当我在iOS 9模拟器上运行应用程序时,我得到一个标题为" MailCompositionService quit的对话框出乎意料"当我查看错误报告时,我看到:
特定应用信息: ***因未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSArrayI isEqualToString:]:无法识别的选择器发送到实例0x7fd314280b10'
以NSException类型的未捕获异常终止 abort()调用 CoreSimulator 179 - 设备:iPhone 6 - 运行时:iOS 9.0(13A4325c) - DeviceType:iPhone 6
邮件撰写视图出现时发生错误。它会冻结几秒钟然后出现错误对话框。
打开邮件撰写视图的代码是:
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];
}
如果有必要知道,在应用崩溃之前,mailComposeController:didFinishWithResult:error:
= result
和MFMailComposeResultCancelled
= error
会调用nil
。
我很欣赏如何找到此错误原因的提示。谢谢!
答案 0 :(得分:15)
问题在于模拟器,在真实设备上邮件编辑器工作正常。
答案 1 :(得分:6)
根据Apple Developer Forum,更多详情为here。
模拟器不支持邮件。您应该尝试测试邮件 设备中的功能。
答案 2 :(得分:1)
你应该使用:
[self.window.rootViewController presentViewController:picker animated:YES completion:NULL];
presentModalViewController已弃用,因为ios6已被presentViewController:animated:completion:
取代
即:
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
答案 3 :(得分:0)
我不知道为什么会发生这种情况或者我是如何发现它的,如果我取消注释应用程序崩溃的那一行,似乎是通过在导航栏的外观代理中设置NSFontAttributeName来生成崩溃。
NSDictionary* format = @{
NSForegroundColorAttributeName:[UIColor whiteColor],
//NSFontAttributeName: [UIFont boldSystemFontOfSize:20],
};
[[UINavigationBar appearance] setTitleTextAttributes:format];
请@Sleiman尝试看看这是否也为您解决了这个问题。
答案 4 :(得分:0)
作为解决此问题的简单方法,您可以使用" mailto"协议,它将:
swift中的示例:
Swift 3.0
let mailRecipient = "support@abc.com"
let mailSubject = "Help with ABC for iOS"
let mailBody = "xxx"
let mailTo = "mailto:\(mailRecipient)?subject=\(mailSubject)&body=\(mailBody)"
guard let escapedMailTo = mailTo.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
NSLog("Invalid mail to format")
return
}
guard let url = NSURL(string: escapedMailTo) else {
NSLog("Invalid mail to format: \(escapedMailTo)")
return
}
UIApplication.sharedApplication().openURL(url)
Swift 2.3
let mailRecipient = "support@abc.com"
let mailSubject = "Help with ABC for iOS"
let mailBody = "xxx"
let mailTo = "mailto:\(mailRecipient)?subject=\(mailSubject)&body=\(mailBody)"
guard let escapedMailTo = mailTo.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet()) else {
NSLog("Invalid mail to format")
return
}
guard let url = NSURL(string: escapedMailTo) else {
NSLog("Invalid mail to format: \(escapedMailTo)")
return
}
UIApplication.sharedApplication().openURL(url)