2013-11-10 7 views
4

Я пытался установить ViewController с контроллером родительского вида, прежде чем он показывает показать, что она может обеспечить спины вызова, я сделал это с помощью PrepareForSegueПрименения пыталось представить модально активный ИОС контроллера

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"newQuarter"]) 
    { 
     [segue.destinationViewController setParentViewController:self]; 
    } 
} 

Он разбился давая мне сообщение об ошибке: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller.

Так что я попытался использовать другой метод и создать новый контроллер представления на кнопку прикасается вверх,

- (IBAction) buttonClicked 
{ 
    NewViewController *newController = [[NewViewController alloc] init]; 
    [newController setParentViewController:self]; 

    [self presentViewController:newController animated:YES completion:nil]; 
} 

, но не повезло, это все равно дает мне то же сообщение об ошибке, может ли кто-нибудь посоветоваться? Благодаря!

+0

Возможный дубликат [«Приложение попыталось представить модально активный контроллер»?] (Http://stackoverflow.com/questions/7429014/application-tried-to-present-modally-an-active-controller) –

+0

@ CarlVeazey это не дубликат «Приложение пыталось представить модально активный контроллер». Спасибо за предложение! : D –

ответ

3

Устранена проблема, поскольку родительский контроллер представления - это tableViewController, который был встроен в navigationViewContoller. Вот почему segue следует толкнуть, а не выполнять модальный переход.

0

Удалите эти 2 строки кода, не нужно устанавливать родительский элемент, используйте делегирование, если вы хотите обратную связь от NewViewController до текущего self.

+0

Я хочу, чтобы обратная связь от NewViewController к текущему виду, как это сделать с делегацией? – jigs

2

У меня была такая же проблема, и объяснение Матфея кажется правильным.

Заменить:

[self presentViewController:newController animated:YES completion:nil]; 

с:

[self.navigationController pushViewController:newController animated:YES]; 
2

Эта линия:

[self presentViewController:newController animated:YES completion:nil]; 

выступит модальный SEGUE, что и дает ошибку.

Используя эту линию вместо:

[self.navigationController pushViewController:newController animated:YES]; 

выполняет SEGUE на «подталкивание» на новый контроллер представления в стек навигации контроллер (в XCode 6 и выше, это то же самое, определяя SEGUE тип «шоу» на раскадровке). Вот почему вам это нужно, когда вы используете контроллер навигации.

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

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