2015-05-06 2 views
0

У меня есть следующие ViewControllers, которые представляют следующий ViewController когда-то закончено:Попытки представить View Controller Предупреждения

Nr1: Мой GameViewController проверяет, что игра закончена, и называют CheckGameFinished:

-(void) checkGameFinished { 
if ([self.gameModel isGameOver]) { 

    double delayTimeInSeconds = 3.5; 
    dispatch_time_t popTimeDelay = dispatch_time(DISPATCH_TIME_NOW, delayTimeInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTimeDelay, dispatch_get_main_queue(), ^(void){ 

    [progressBarTimer invalidate]; 

    level2ViewController *govc = [self.storyboard instantiateViewControllerWithIdentifier:@"level2ViewController"]; 

    [self.finishAudio play]; 

    [self presentViewController:govc animated:NO completion:^(){ 
     [self.gameModel clearGameData]; 

    }]; 
      }); 
} 
} 

Тогда level2ViewController:

- (void)viewDidLoad { 
[super viewDidLoad]; 

double delayTimeInSeconds = 2; 
dispatch_time_t popTimeDelay = dispatch_time(DISPATCH_TIME_NOW, delayTimeInSeconds * NSEC_PER_SEC); 
dispatch_after(popTimeDelay, dispatch_get_main_queue(), ^(void){ 


    GameViewController *gvc = [self.storyboard instantiateViewControllerWithIdentifier:@"gameViewController"]; 

    [self presentViewController:gvc animated:NO completion:nil]; 


}); 

} 

и называется следующим ViewController и т. д.

Теперь я получаю сверхурочную работу следующие предупреждения:

Предупреждение: Попытка представить GameViewController на level2ViewController которого вид не в иерархии окон!

+0

Возможный дубликат [чей вид не находится в иерархии окон] (http://stackoverflow.com/questions/11862883/whose-view-is-not-in-the-window-hierarchy) –

+0

Вы создаете новые контроллеры представлений навсегда? 'GameViewController' создает экземпляр' level2ViewController', который создает экземпляр 'GameViewController', который ... –

+0

Контроллер представления находится в моей раскадровке, и я хочу просто называть их без segues. – iOSBeginner

ответ

1

Не представить контроллер представления из viewDidLoad, а звонить из viewDidAppear:. Также, используя dispatch_after (при условии, что вы используете его, чтобы надеяться, убедитесь, что просмотр на экране, а не для игровых целей) - очень плохая практика.
Когда контроллер представления, который загружается сделал представляются (что происходит, когда viewDidAppear: называется), вы можете представить другую один:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    GameViewController *gvc = [self.storyboard instantiateViewControllerWithIdentifier:@"gameViewController"]; 
    [self presentViewController:gvc animated:NO completion:nil]; 
} 
+0

но в моей игре я не могу назвать это из viewdidappear. Я хочу вызвать его, когда был вызван метод CheckGameFinished ... Для другого контроллера представления он работает по назначению, спасибо – iOSBeginner

+0

Я имел в виду ваш второй кусок кода, который пытается представить контроллер вида из 'viewDidLoad' –

+0

oh ok , это отлично работает сейчас, спасибо – iOSBeginner

0

Я получаю это, когда мой segue типа был modal, переходя к push исправил его для меня

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