2012-01-17 2 views
2

Я искал решение моей проблемы, но ничего не нашел.ОтклонитьModalViewController then popViewController

У меня есть UINavigationController со стеком UIViewControllers (все это в TabbarController, если это актуально). На последнем ViewController, я хочу, чтобы отправить по электронной почте:

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

Затем в делегате после электронной почты была отправлена, я хочу, чтобы закрыть электронную ViewController, а также палить последний ViewController в стеке NavigationController:

-(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

Try инициируя поп задерживается

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]; 
    }]; 
    [...] 
} 

Даже если это кажется немного хака, он должен работать.

+0

Да, это работает! Огромное спасибо. Вы знаете, почему это работает? – janeway

+0

На самом деле, у меня была такая проблема до этого и решена так. Я боюсь, что я не знаю, почему это работает, у меня просто была эта идея, она протестировала ее, и это сработало. Я думаю, что увольнение этого модального представления должно быть полностью выполнено, чтобы поддерживать правильный стек viewController, позволяя поп-функции функционировать должным образом. Всякий раз, когда я сталкиваюсь с вещами, которые кажутся странными и которые должны функционировать в связи с анимированными задачами UIKit, но не работают, я стараюсь так. – Till

+0

Это обычно не работает в iOS 5, потому что self.navigationController имеет значение null для модального управления представлением :( – Adam

Смежные вопросы