ios:应用程序试图在目标上呈现一个 nil 模态视图控制器
Posted
技术标签:
【中文标题】ios:应用程序试图在目标上呈现一个 nil 模态视图控制器【英文标题】:ios: Application tried to present a nil modal view controller on target 【发布时间】:2013-10-08 04:24:36 【问题描述】:我正在开发一个应用程序,要求是通过单击 UIAlertView 按钮打开电子邮件编写器。
邮件正文中的消息是从 UITextView 复制而来的。我正在使用以下代码片段:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 0)
// opening message composer
else
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Test mail"];
[picker setMessageBody:messageBody.text ishtml:YES];
[self presentViewController:picker animated:YES completion:NULL];
// mail compose delegate
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
[self dismissViewControllerAnimated:YES completion:NULL];
但问题是我收到错误消息说应用程序试图在目标上呈现一个 nil 模态视图控制器。我们如何在 ios 7 中打开默认邮件编辑器?
【问题讨论】:
【参考方案1】:根据 Apple,您应该检查 MFMailComposeViewController 是否能够在发送前发送您的邮件
if ([MFMailComposeViewController canSendMail])
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Test mail"];
[picker setMessageBody:messageBody.text isHTML:YES];
[self presentViewController:picker animated:YES completion:NULL];
斯威夫特:
if MFMailComposeViewController.canSendMail() else
// Send mail code
参考:Apple Dev url
【讨论】:
保护机制动摇了! 但是为什么短信(MFMessageComposeViewController)不需要这个检查呢?我有一个没有 sim 卡的测试设备,从技术上讲它不应该能够发送文本,但是没有检查它可以正常工作(没有抛出异常)......为什么?谢谢。 那么,不用再在模拟器上测试发送邮件 UI了...? 用户的设备可能没有配置电子邮件帐户。因此,在模拟器上进行测试可以抓住缺失的守卫。添加canSendMail
后,我们将不得不依赖设备测试。【参考方案2】:
Swift 4 版本
guard MFMailComposeViewController.canSendMail() else
print("Mail services are not available")
return
sendEmail()
【讨论】:
【参考方案3】:在设备设置中忘记邮件帐户配置也可能导致此错误。重新检查您的设备中是否配置了邮件帐户。
【讨论】:
以上是关于ios:应用程序试图在目标上呈现一个 nil 模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在目标上呈现一个 nil 模态视图控制器
应用程序试图在目标 <UIApplicationRotationFollowingController: 0x100c75280> 上呈现一个 nil 模态视图控制器