2010-08-17 4 views
14

In meiner Anwendung funktioniert MFMailComposeViewController einwandfrei, aber das Erstellen einer neuen Instanz von MFMessageComposeViewController schlägt fehl.MFMessageComposeViewController Alloc gibt Null zurück

Hier ist der Code für beide:

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

Seine scheinbar offensichtlich, dass alles korrekt ist die Verknüpfung, da die E-Mail-View-Controller funktioniert gut. Gibt es etwas, das mir fehlt, vielleicht konfigurationsbedingt?

Antwort

42

Haben Sie +[MFMessageComposeViewController canSendText] überprüft?

Vom MFMessageComposeViewController Class Reference,

Bevor Sie eine Nachricht Zusammensetzung Ansicht präsentiert, rufen Sie die canSendText Klasse Methode, um sicherzustellen, dass das Gerät des Benutzers entsprechend konfiguriert ist. Versuchen Sie nicht, eine Nachrichtenansicht anzuzeigen, wenn die canSendText-Methode NO zurückgibt. Wenn die SMS-Zustellung nicht verfügbar ist, können Sie den Benutzer benachrichtigen oder einfach die SMS-Funktionen in Ihrer Anwendung deaktivieren.

Ab iOS 5 können Sie sich registrieren, um über Änderungen der Verfügbarkeit von SMS benachrichtigt zu werden, die über die MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification Benachrichtigung gesendet werden.

Gründe es nil Rückkehr werden:

  • Gerät iOS nicht aktiv 4.
  • Gerät ist ein iPod Touch/iPad ohne iMessage aktiviert.
  • Keine SIM-Karte? (Die Ansicht wird jetzt in iOS 6 angezeigt. Die App wird nicht über den Fehler beim Senden der Nachricht benachrichtigt.)
  • "Gerät" ist eigentlich der Simulator. (Vielleicht funktioniert dies in iOS 6 auch.)

ähnlich [[MFMailComposeViewController alloc] init] kehrt nil, wenn keine E-Mail-Konten aktiviert werden (Sie schnell dies durch die Deaktivierung Konten in den Einstellungen testen können), sondern zeigt auch ein „No-Mail-Konten konfigurieren“ Alarm für dich. MFMessageComposeViewController tut dies nicht.

+0

Ausgezeichnet, danke. Ich hätte wahrscheinlich deutlicher sein müssen, dass das Problem mit dem Simulator auftritt, der offensichtlich keine SMS-Fähigkeit besitzt. – Lee

+0

Wenn keine SIM-Karte vorhanden ist, wird die App beendet. Warum? Es gibt nur eine Popup-Meldung "keine SIM-Karte vorhanden". Es Ereignis sendet ein SMS gesendet Ergebnis an die Delegate-Methode. dann beendet. Gibt es eine Möglichkeit, das Austreten zu verhindern? – karim

+0

Haben Sie die Konsole auf Nachrichten überprüft? Stürzt es oder "normal" ab? Gibt es ein Absturzprotokoll? Hilft das Hinzufügen eines Debuggers? –