2010-08-17 51 views
14

在我的應用程序中,MFMailComposeViewController工作正常,但創建MFMessageComposeViewController的新實例失敗。MFMessageComposeViewController alloc返回無

下面是兩個代碼:

-(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]; 
} 

它似乎很明顯,一切都正確連接,因爲電子郵件視圖控制器正常工作。有沒有我缺少的配置明智?

回答

42

你檢查了+[MFMessageComposeViewController canSendText]

MFMessageComposeViewController Class Reference

之前呈現消息組成視圖,調用canSendText類方法,以確保用戶的設備被適當地配置。如果canSendText方法返回NO,則不要嘗試呈現消息組合視圖。如果短信傳送不可用,您可以通知用戶或者簡單地禁用應用程序中的SMS功能。

從iOS 5開始,您可以通過MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification通知來註冊,通知發送文本消息的可用性發生變化。

原因,可能會返回nil

  • 設備未運行iOS 4
  • 設備是一部iPod touch/iPad上沒有的iMessage功能。
  • 沒有SIM卡? (該視圖現在顯示在iOS 6中;應用程序未收到消息發送失敗通知。)
  • 「設備」實際上是模擬器。 (也許這部作品在iOS 6中得。)

同樣,[[MFMailComposeViewController alloc] init]回報nil時沒有郵件帳戶啓用(可以快速通過禁用設置帳戶測試此),但也顯示出「沒有配置郵件賬戶」警惕你。 MFMessageComposeViewController不會這樣做。

+0

非常好,謝謝。我可能應該更清楚地認識到,使用模擬器出現問題顯然沒有SMS功能。 – Lee 2010-08-17 14:52:06

+0

如果沒有SIM卡,則應用程序退出。爲什麼?它只是給出了一個彈出消息「不存在SIM卡」。它發送一個SMS發送結果給委託方法。然後退出。有沒有辦法阻止它退出? – karim 2010-10-08 09:26:35

+0

你檢查了控制檯的消息嗎?它是否會崩潰或退出「正常」?有沒有崩潰日誌?附加調試器有幫助嗎? – 2010-10-13 20:17:40