2010-10-21 3 views
3

У меня есть navigationController, откуда я запускаю ModalViewController. В этом ModalViewController я покажу MailComposer, который сам является другим ModalViewController.2 ModalViewController

Теперь, если пользователь нажимает кнопку отправки, MailComposerView должен быть уволен и другим ModalViewController. Для этого я вызываю метод делегата в mailComposerController.

Теперь только MailComposerView будет уволен, но не является другой ModalViewController и я получаю следующее сообщение об ошибке

attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x724d500> modalViewController = <UINavigationController: 0x72701f0> 

У вас есть идея, что я делаю неправильно?

Первый ModalView

- (void)addList { 
NSLog(@"addList"); 

//AddListViewController *addListViewController = [[AddListViewController alloc] init]; 
AddListViewController *addListViewController = [[AddListViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
addListViewController.delegate = self; 

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addListViewController]; 
navigationController.navigationBar.barStyle = UIBarStyleBlack; 
navigationController.navigationBar.translucent = YES; 
[self presentModalViewController:navigationController animated:YES]; 

[navigationController release]; 
[addListViewController release]; } 

В AddListViewController вызова MailView

MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init]; 
    mailComposer.mailComposeDelegate = self; 

    NSString *subject = [NSString stringWithFormat:@"Group invite for groupname: %@", @"mhm"]; 
    [mailComposer setSubject:subject]; 

    // Fill out the email body text 
    NSString *emailBody = @"This is an group invite bla bla"; 
    [mailComposer setMessageBody:emailBody isHTML:NO]; 

    [self presentModalViewController:mailComposer animated:YES]; 
    [mailComposer release]; 

В методе mailComposerController

[self.navigationController dismissModalViewControllerAnimated:YES]; 
[self.delegate finishAddList:checkmark andListName:listName.text]; 

В делегатом finsihAddList

[self dismissModalViewControllerAnimated:YES]; 

ответ

3

Вы должны вызывать второе увольнение с опозданием, потому что первое отклонение еще не было сделано при вызове.

[self performSelector: @selector(finish:) withObject: obj afterDelay: 0.0f]; 

Задержка 0.0f является намеренной, это означает, что это будет сделано в следующем цикле событий.

+0

Пробовал, но все равно получить ту же ошибку [self.delegate performSelector: @selector (finishAddList :) withObject: listName.text afterDelay: 0.0f]; – gabac

+0

Вы пытались удалить анимацию во втором увольнении? И вы пробовали с большей задержкой? – jv42

+0

большое дело помогает! thx a lot – gabac

8

У меня была аналогичная проблема. У меня была своя папка с визуальным представлением. Когда я попытался отклонить их, начиная с видимого, и, перемещаясь по стеку, я потерпел бы неудачу с той же ошибкой. Решение заключалось в том, чтобы отклонить контроллер вида в нижней части стека. Он отклонил бы все выше.

В вашем случае мое решение будет означать изменение метода mailComposerController, так что оно содержит только одну строку (не отклоняет самый верхний modal vie-контроллер).

[self.delegate finishAddList:checkmark andListName:listName.text]; 

Я знаю, что вы уже решили свою проблему, но подумали, что это может быть полезно для других.

+0

очень приятно! thx много – gabac

+1

Это лучшее решение, потому что оно не связано с выбором времени. –

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