MFMessageComposeViewController alloc返回nil

时间:2010-08-17 00:46:46

标签: iphone objective-c ios4 mfmailcomposeviewcontroller

在我的应用程序中,MFMailComposeViewController工作正常,但创建MFMessageComposeViewController的新实例失败。

以下是两者的代码:

-( IBAction)sendSMS: (id)sender
{
 MFMessageComposeViewController *picker = [[[MFMessageComposeViewController alloc] init] autorelease];
 picker.messageComposeDelegate = self;

 NSArray *toRecipients = [NSArray arrayWithObject: cell.currentTitle ]; 

 picker.recipients = toRecipients;

 [self presentModalViewController:picker animated:YES];
}

-( IBAction)sendEmail: (id)sender
{
 MFMailComposeViewController *picker = [[[MFMailComposeViewController alloc] init] autorelease];
 picker.mailComposeDelegate = self;

 NSArray *toRecipients = [NSArray arrayWithObject: email.currentTitle ]; 

 [picker setToRecipients:toRecipients];

 [self presentModalViewController:picker animated:YES];
}

由于电子邮件视图控制器工作正常,所以一切都正确链接似乎很明显。是否有一些我缺少的东西可能是配置明智的?

1 个答案:

答案 0 :(得分:46)

您检查过+[MFMessageComposeViewController canSendText]吗?

来自MFMessageComposeViewController Class Reference

  

在呈现消息组合视图之前,请调用canSendText类方法以确保正确配置用户的设备。如果canSendText方法返回NO,请不要尝试显示消息组合视图。如果没有短信发送,您可以通知用户或只是禁用应用程序中的短信功能。

     

从iOS 5开始,您可以注册以通过MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification通知收到有关短信发送可用性变化的通知。

可能返回的原因nil

  • 设备未运行iOS 4.
  • 设备是未启用iMessage的iPod Touch / iPad。
  • 没有SIM卡? (该视图现在显示在iOS 6中;应用程序未收到消息发送失败的通知。)
  • “设备”实际上是模拟器。 (也许这也适用于iOS 6。)

同样,[[MFMailComposeViewController alloc] init]在没有启用邮件帐户时返回nil(您可以通过在“设置”中禁用帐户来快速测试),但也会显示“未配置邮件帐户”提醒。 MFMessageComposeViewController不会这样做。