Причины простого переключения контроллера представления: Попытка представить во время презентации

Я изучаю, как обрабатывать иерархии контроллеров представления с помощью раскадровки. У меня есть 2 ViewController: корень типа cwViewController (я понимаю, что это «я» ниже) и второй типа WorkspaceViewController. Я получаю сообщение "Попытка презентации во время презентации!" в результате этого кода.

- (IBAction)nextView {
    WorkspaceViewController *workspace = [[WorkspaceViewController alloc] initWithNibName:nil bundle:nil];
    [self presentViewController:workspace animated:YES completion:NULL]; }

Ответ на вопрос Как правильно представить контроллер представления? является ближайшим ответом, который мог бы apply, но не совсем соответствует этому сценарию, потому что я не переключаюсь между VC, я просто представляю один, а затем закрываю его, чтобы отобразить оригинал.

Затем я попытался отклонить текущий, прежде чем представить второй, как предлагалось в некоторых ответах, например:

[self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:workspace animated:YES completion:NULL];

Но это просто дает мне дополнительное предупреждение: попытка отклонить от контроллера представления во время презентации или отклонить!

Проведя некоторые другие исследования, я увидел, что аналогичные проблемы решаются путем добавления блока в

[self dismissViewControllerAnimated:YES...]

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


person roro    schedule 28.04.2013    source источник
comment
Во-первых, если вы используете раскадровку, вы должны выделить WorkspaceViewController. Это не способ создать экземпляр контроллера представления из раскадровки. Есть ли у вас какие-либо переходы в раскадровке?   -  person rdelmar    schedule 28.04.2013
comment
Возникает ли эта проблема из-за того, что вы быстро нажимаете кнопку «Далее»?   -  person user523234    schedule 28.04.2013
comment
rdelmar, нет, я еще не использовал переходы. Не стесняйтесь указывать мне в правильном направлении. user523234 Это происходит при первом вызове следующего представления (вызывается из наблюдателя уведомлений). Спасибо всем.   -  person roro    schedule 29.04.2013
comment
rdelmar, вы имели в виду, что мне НЕ следует выделять WorkspaceViewController?   -  person roro    schedule 29.04.2013
comment
Я вижу, что, возможно, я могу использовать [self PerformSegueWithIdentifier:toWorkspace sender:‹#(id)#›]; Затем я могу щелкнуть переход в раскадровке, соединяющий V1 и V2, и в редакторе раскадровки я могу назвать идентификатор этого перехода toWorkspace. Но приведенный выше метод по-прежнему говорит об использовании необъявленного идентификатора «toWorkspace». Нужно ли импортировать раскадровку, и если да, то как?   -  person roro    schedule 29.04.2013


Ответы (2)


Вы создали переход от кнопки к вашему WorkSpaceViewController? Если это так, вы, вероятно, пытаетесь представить WorkSpaceView дважды — один раз при выборе кнопки и один раз из cwViewController. Чтобы устранить ошибку, удалите переход от кнопки к WorkSpaceViewController, а затем заново создайте переход — на этот раз между cwViewController и WorkSpaceViewController. Это должно позаботиться об этом.

person B-Rad    schedule 27.07.2013

пытаться

[self presentModalViewController:workspace animated:YES];
if (![[self modalViewController] isBeingPresented]) {
      [self dismissModalViewControllerAnimated:YES];
}
person Dominic    schedule 28.04.2013