presentViewController与iPad崩溃但不与iPhone

时间:2016-05-04 17:58:10

标签: objective-c iphone ipad presentviewcontroller

我的iPhone应用程序被TestFlight拒绝,因为它崩溃了iPad。违规代码试图显示一个发送电子邮件的控制器。我已经将代码简化为一个简单的小例子,它在运行iOS 9.3.1的iPhone 5c上运行正常,但崩溃了我运行iOS 9.3.1的iPad 2:

- (void)viewDidLoad {
  [super viewDidLoad];
  [self displayComposerSheet];
}

-(void)displayComposerSheet {
  // Create e-mail interface
  MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
  picker.mailComposeDelegate = self;
  [picker setSubject:@"iPad crash test"];

  // Add recipients
  NSArray *toRecipients = [NSArray arrayWithObject:@"email@somewhere.com"];
  [picker setToRecipients:toRecipients];

  // Fill body
  NSString *emailBody = @"A short test of iPad crashes";
  [picker setMessageBody:emailBody isHTML:NO];

  // Show interface - iPad crashes here but iPhone is ok
  [self presentViewController:picker animated:YES completion:nil];
}

错误消息是:

  

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'应用程序尝试在目标上显示nil模态视图控制器。'

我花了一些时间来搞清楚这一点但却无法解决这个问题。任何想法或建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

要发送电子邮件,应在设备上定义电子邮件帐户。如果未设置帐户,MFMailComposeViewController将产生问题并崩溃。

最好检查您的设备是否能够通过canSendMail方法发送电子邮件。

if ([MFMailComposeViewController canSendMail])
    [self presentViewController:picker animated:YES completion:nil];