2012-03-31 15 views
0

Ich habe eine iOS TabBar- Anwendung mit TabBarController und Navigation. In meiner Detailansicht, die von meinem ersten tab tabletviewcontroller geschoben wird, habe ich navigationItem.rightBarButtonItem mit E-Mail teilen geteilt.MFMailComposeViewController ModalView stürzt die iOS5 Anwendung

Ich habe den folgenden Code dafür:

- (void)share 
{ 
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"Send" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Email",nil]; 
    popupQuery.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
    [popupQuery showInView:self.view]; 
    [popupQuery release]; 
} 

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 

     if (buttonIndex == 0) { 
     if ([MFMailComposeViewController canSendMail]){ 
      MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
      [picker setMailComposeDelegate:self]; 
      [picker setSubject:@"New theme"]; 
      NSString *emailBody = @"Hi there"; 
      [picker setMessageBody:emailBody isHTML:NO]; 
      [self resignFirstResponder]; 
      picker.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      picker.modalPresentationStyle = UIModalPresentationCurrentContext; 
      [self presentModalViewController:picker animated:NO]; 
      [picker release]; 

     } 
     else{ 
     } 
} 
} 

Die App zeigt mir das Komponieren Aussicht, aber wenn ich versuche, etwas mit dieser Ansicht zu tun (zB um die Adresse abholen oder etwas zu buchstabieren) - App stürzt mit SIGTRAP ab.

Die App stürzt nur in iOS5, iOS5.1. In iOS4.2.1 funktioniert alles perfekt.

Was ist das Problem? Irgendwelche Ideen?

+1

Wenn Sie einen Ausnahmehaltepunkt setzen oder sonst die Ausnahme abfangen, was ist die Nachricht und der Stack-Trace? –

+1

was ich in meinem Crittercism-Dashboard sehen kann: https: // docs. google.com/document/d/1YTec1-gnrIhSUkvt66RcIouwtjgu6HgF2CTQcQ21pCw/edit und hier ist, was ich in Xcode in Haupt-Thread sehen: https://docs.google.com/document/d/1AKLqTYYoTa8TcfRJ6-BEEHnafzT-w6NaV8frvPdoOB8/edit – oadash

Antwort

0

Danke Jungs für Ihre Hilfe und Ihre Zeit.
Es war absolut verrückt Bug. Das Projekt hat einen kyrillischen Namen. Ich habe es nur in lateinischen Namen umbenannt und jetzt funktioniert alles gut. Mein Fehler :(Danke Evgeniy Shurakov für die Hilfe.

+0

Kumpel, können Sie bitte kurz zu diesem Problem erklären. Ich habe auch dasselbe Problem, aber ich kann es lösen. Ich bekomme keine kyrillischen und lateinischen Unterschiede. – Gaurav

+0

das ist seltsam. Mein Problem war - kyrillischer Name. Deshalb ist meine App abgestürzt. Ich habe das Projekt überall umbenannt (schaue sorgfältig durch alle Projektdateien und ersetze den kyrillischen Namen durch lateinisch). – oadash

1

Laut der Dokumentation, würde ich vorschlagen [MFMailComposeViewController canSendMail] Klassenmethode vor der Erstellung MFMailComposeViewController aufrufen. Ich habe auch generell keine [self resignFirstResponder] Linie. Ich nehme an, Sie stürzen, bevor Ihre mailComposeController:didFinishWithResult:error Methode aufgerufen wird?

+0

ich rufe . canSendMail bevor die Steuerung zu schaffen (es gibt einen Fehler im Code oben war) Also hier ist der Code: 'if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController * Picker = [[MFMailComposeViewController alloc] init];' Und ich habe es versucht, ohne 'resignFirstResponder' - derselbe Fehler. Du hast Recht, ich stürze mich vor 'mailComposeController: didFinishWith Ergebnis: error'-Methode wird aufgerufen. – oadash

+0

Neugierig. Und wir sind sicher, dass dieses Delegate-Objekt noch zu dem Zeitpunkt existiert, zu dem der 'CFMailComposeViewController' auch dem Benutzer präsentiert wird? Ich könnte mir einen seltsamen Absturz vorstellen, wenn das Objekt, das Sie als Delegierten von 'CFMailComposeViewController' definiert haben, veröffentlicht wurde (was leicht zu machen ist, denn obwohl Sie eine modale Ansicht präsentieren, wird Ihr Code weiterhin ausgeführt). Vielleicht NSLog in Ihrem - (void) dealloc oder so etwas, nur um sicherzustellen. – Rob

+0

Sie haben Recht, '(void) dealloc' Methode des Delegaten (' self') wird aufgerufen, nachdem meine Detailansicht (die der 'CFMailComposeViewController' Delegat ist) gedrückt wird. Versuchte es auf iOS4 - '(void) dealloc' heißt, aber alles funktioniert gut. – oadash