2014-07-11 52 views
0

我正在開發一個應用程序,允許用戶通過郵件拍照併發送(xcode版本5.1.1)。郵件發送後,確認彈出消息:iOS應用程序崩潰點擊按鈕

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error{ 
    switch (result) 
    { 
    case MFMailComposeResultCancelled: 
     [[[UIAlertView alloc]initWithTitle:@"Message Cancelled" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]show]; 
     break; 
    case MFMailComposeResultSent: 
     [[[UIAlertView alloc]initWithTitle:@"Message Sent" message:@"Thank you for your help." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]show];     break; 
    default: 
     break; 
    } 
    [self dismissViewControllerAnimated:NO completion:nil]; 
} 

關於在模擬器「OK」點擊,Xcode中突出了main.m文件代碼,短語「主題1:信號SIGABRT」 :

int main(int argc, char * argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

當我在iPhone上測試的應用程序,同樣的事情,它點擊OK時崩潰。

你對如何解決這個問題有什麼想法嗎?

提前感謝您的幫助和建議

+0

嘗試添加異常斷點並重現崩潰:http://stackoverflow.com/questions/17802662/exception-breakpoint-in-xcode – BergQuester

+0

我無法重現您的問題。用我的測試中的委託方法顯示alertView。你向viewController聲明瞭'MFMailComposeViewControllerDelegate'?請顯示您如何調用'MFMailComposeViewController'並設置郵件。 – Sebastian

+1

要了解如何調試,請參閱http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 – rmaddy

回答

3

的問題很可能是由您設置的事實引起了警報視圖的delegateself,然後您關閉self。當您在警報視圖上點擊確定時,它會嘗試訪問其委託,但代表已被解散,從而導致應用程序崩潰。

有兩種解決方法:

  1. 通行證nildelegate參數創建警報視圖時。您無需處理任何警報視圖操作。
  2. 當解聘郵件控制,做到這一點通過如下:

代碼:

[controller dismissViewControllerAnimated:YES completion:nil]; 
+0

非常感謝!完美的作品! – mdicamp

0

如果我正確地解釋你的問題,這是你顯示UIAlertView中,用戶點擊之後點擊「確定」關閉你的UIAlertView,你會得到崩潰。如果是這樣,那麼崩潰是最有可能在你的UIAlertView中委託內部發生:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
} 

嘗試設置一個斷點接近該方法的頂部,然後通過代碼,直到發生錯誤(按「確定」後)。

在那裏,您可能會發現您試圖訪問不再存在的對象。如果在那裏找不到錯誤,那麼最好發佈didDismissWithButtonIndex:方法的代碼。

相關問題