dismissModalViewController затем popViewController - PullRequest
2 голосов
/ 18 января 2012

Я искал решение своей проблемы, но пока ничего не нашел.

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

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

Затем в делегате после того, как электронное письмо было отправлено, я хочу закрыть электронный видовой контроллер, а также вытащить последний 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 правильно удаляется из списка.

Любые мысли и предложения приветствуются.Проблема может лежать где-то еще в моем коде. Я хочу убедиться, что эта часть в порядке.Спасибо.

1 Ответ

5 голосов
/ 18 января 2012

Попробуйте инициировать всплывающее сообщение с задержкой

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

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

...