2015-08-20 2 views
0

У меня 2 Просмотр контроллеров и я получаю ошибку выше с помощью этого:Попытка представить чей вид не в окне иерархии цель (при использовании SEGUE) - с

-(void)hitwtf{ 

    if (CGRectIntersectsRect(ufo.frame, sanchez.frame)) { 
     if(((sanchez.frame.origin.y + sanchez.frame.size.height - 5) <= (ufo.frame.origin.y)) && (sanchezJumping < 0)) 
     { 

      [self performSegueWithIdentifier:@"pushToGameOver" sender:self]; 
}   
} 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

if([segue.identifier isEqualToString:@"pushToGameOver"]){ 

    AudioServicesPlaySystemSound(sanchezdeath); 


    GameOverViewController *controller = (GameOverViewController *)segue.destinationViewController; 
    controller.CurrentScore = CurrentScore; 

     } 
} 

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

EDIT:

Ответ: (. В ответ на замечания)

- (void)viewWillDisappear:(BOOL)animated { 
    if(timer) 
    { 
    [timer invalidate]; 
    timer = nil; 
    } 
} 
+0

вы пробовали положить точки останова в методе prepareForSegue? Может быть, это называется несколько раз? – Huunneki

+0

Я добавил звук (см. Отредактированную тему), и да, это называется несколько раз. Но как я могу остановить его? Я удаляю sanchez в процессе подготовки к методу segue swell, так как могут кадры все еще иметь контакт и снова вызвать метод prepareForSegue? Или, может быть, это причина таймера, которую я вызываю hitwtf каждые 0,05 секунды? – Robin

+0

Недействительный таймер перед выполнением сеанса? –

ответ

0

У меня есть две идеи для вашей проблемы:

Либо переместить Sanchez/нло обратно к месту это было до столкновения.

Или добавьте булево

@property (nonatomic, assign) BOOL collision; 

И добавить это в вашем методе:

if(!self.collision && ((sanchez.frame.origin.y + sanchez.frame.size.height - 5) <= (ufo.frame.origin.y)) && (sanchezJumping < 0)) 
    { 
     self.collision = YES; 
     [self performSegueWithIdentifier:@"pushToGameOver" sender:self]; 
+0

ответ должен был сделать недействительным таймер, плохо отредактировать мой пост спасибо – Robin

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