2012-01-17 61 views
2

我一直在尋找解決我的問題,但到目前爲止還沒有發現任何東西。我有一個UINavigationController與一堆UIViewControllers(這是所有在一個TabbarController,如果這是相關的)。在最後的ViewController,我想發送電子郵件:在委託dismissModalViewController然後popViewController

MFMailComposeViewController *emailVC = [[MFMailComposeViewController alloc] init]; 
// fill out emailVC properties ... 
[self presentModalViewController:emailVC animated:YES]; 

隨後的電子郵件發送後,我想收郵件視圖 - 控制,並在NavigationController棧中彈出最後的ViewController:

-(void)mailComposeController:(MFMailComposeViewController *)controller 
     didFinishWithResult:(MFMailComposeResult)result 
        error:(NSError *)error 
    { 
     // save some variables here ... 
     [self dismissModalViewControllerAnimated:YES]; // This line works by itself 
     [self.navigationController popViewControllerAnimated:NO]; // this line causes EXC_BAD_ACCESS 

但是,最後一行會導致某處崩潰。 我已經檢查了ViewController堆棧之前和之後。最後一個viewController正確地從列表中刪除。

歡迎任何想法或建議。問題可能出在我的代碼的其他地方,我想確保我有這部分好的。謝謝。

回答

5

嘗試啓動彈出延遲

的iOS 3及更高版本的解決方案

-(void)mailComposeController:(MFMailComposeViewController *)controller 
     didFinishWithResult:(MFMailComposeResult)result 
        error:(NSError *)error 
{ 
    [...] 
    [self dismissModalViewControllerAnimated:YES]; 
    [self performSelector:@selector(doThePop) withObject:nil afterDelay:0.40]; 
    [...] 
} 

- (void)doThePop 
{ 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

您可能要微調的延遲。

的iOS 5及更高版本的解決方案

-(void)mailComposeController:(MFMailComposeViewController *)controller 
      didFinishWithResult:(MFMailComposeResult)result 
         error:(NSError *)error 
{ 
    [...] 
    [self dismissViewControllerAnimated:YES completion:^ 
    { 
     [self.navigationController popViewControllerAnimated:NO]; 
    }]; 
    [...] 
} 

即使這似乎有點hackish,它應該工作。

+0

是的,這個工程!非常感謝。你知道它爲什麼有效嗎? – janeway 2012-01-17 22:18:12

+0

事實上,我之前有過這樣的問題,並通過這種方式解決了這個問題。我害怕我不知道**爲什麼它有效,我只是有這個想法,測試它,它的工作。我認爲這種模式視圖的解除需要全部完成,以保持適當的viewController堆棧,使彈出功能正常。每當我遇到那些看起來很奇怪的事情,並且應該與動畫UIKit任務聯合工作,但卻無法正常工作時,我會以這種方式嘗試。 – Till 2012-01-17 22:27:17

+0

這通常不會在iOS 5中工作,因爲self.navigationController對於模態視圖控制器爲null :( – Adam 2012-08-31 10:17:47