2016-05-04 13 views
0

Meine iPhone App wurde von TestFlight abgelehnt, weil das iPad abgestürzt ist. Der fehlerhafte Code versucht, einen Controller zum Senden einer E-Mail anzuzeigen. Ich habe den Code in ein kleines, einfaches Beispiel reduziert, die auf meinem iPhone 5c mit iOS 9.3.1 wie erwartet funktioniert aber stürzt mein iPad 2 mit iOS 9.3.1:presentViewController stürzt mit dem iPad ab, aber nicht mit dem iPhone

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

Die Fehlermeldung lautet:

*** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: 'Anwendung versucht, einen Nullmodalansicht-Controller auf Ziel zu präsentieren.'

Ich habe ein wenig Zeit damit verbracht, herauszufinden, aber nicht in der Lage, es auszuarbeiten. Irgendwelche Ideen oder Vorschläge würden sehr geschätzt werden!

+0

Ist 'Picker'' nil'? Lesen Sie die Dokumentation für 'MFMailComposeViewController'. Sie müssen überprüfen, ob das Gerät E-Mails senden kann, bevor Sie versuchen, diese Klasse zu verwenden. – rmaddy

Antwort

0

Um E-Mails senden zu können, muss auf dem Gerät ein E-Mail-Konto definiert sein. Wenn ein Konto nicht eingerichtet ist, erstellt MFMailComposeViewController ein Problem und stürzt ab.

Es ist besser zu überprüfen, ob Ihr Gerät per canSendMail-Methode E-Mails senden kann.

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

Der gesamte Inhalt der 'displayComposerSheet'-Methode sollte in der 'if'-Anweisung enthalten sein. Es gibt keinen Grund, die "MFMailComposeViewController" -Instanz selbst zu erstellen und einzurichten, wenn das Gerät keine E-Mails senden kann. – rmaddy

Verwandte Themen