2015-01-16 1 views
0

App сбой с этой ошибкойNSInvalidArgumentException: Нажатие и тот же экземпляр контроллера вид больше, чем когда-то не поддерживается

NSInvalidArgumentException :Pushing the same view controller instance more than once is not supported 

получаю эту ошибку при попытке нажать другую navigationcontroller от UIBarButtonItem другого навигационного контроллера.

Сообщение показывает в консоли:

UINavigationController pushViewController:transition:forceImmediate:]_block_invoke + 0 

Это переход кодирования

else if ([segue.identifier isEqualToString:@"showGroupView"]) { 
     GroupView *groupView = (GroupView *)segue.destinationViewController; 

     [self.navigationController pushViewController:groupView animated:YES]; 
} 

Если кто-то может помочь устранить эту ошибку

+0

Если вы используете segue, вы также не должны вводить код. Сделайте то или другое, а не то и другое. – rdelmar

ответ

0

Ну это я, как я проверил, если мой вид контроллер на навигационной стеке или нет , но что на самом деле решить мою проблему

if ([[self.navigationController topViewController] isKindOfClass:[groupView class]]){ 
      self.navigationController.navigationBarHidden = YES; 
     }else{ 
      self.navigationController.navigationBarHidden = NO; 
     } 

Таким образом, весь код идет как это для тех, кто ссылок хотя

else if ([segue.identifier isEqualToString:@"showGroupView"]) { 
      GroupView *groupView = (GroupView *)segue.destinationViewController; 
     if ([[self.navigationController topViewController] isKindOfClass:[groupView class]]){ 
      self.navigationController.navigationBarHidden = YES; 
     }else{ 
      self.navigationController.navigationBarHidden = NO; 
     } 
     NSLog(@"showGroupViewsegued"); 

    } 
1

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

Другими словами, segue.destinationViewController имеет уже, который был либо одним из родителей текущего контроллера вида, либо сам текущий контроллер.

Фактический причина, так как это невозможно определить, не видя ваш код. Возможно, у вас есть аналогичная проблема с this question, поскольку среда выполнения позволяет выполнить событие дважды. В равной степени возможно, что что-то делать с segue выключено.

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

+0

Спасибо за вашу помощь, хотя я решил свою проблему. Цените свой ответ, хотя. благодаря – user1120133

0

Для вашего костюма вы должны удалить «[self.navigationController pushViewController: groupView animated: YES];», и он перейдет к storyBpard конкретного segue.destionViewController.

Я сам тестирую.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
// 只作为传值使用 不用再进行导航控制器的 跳转操作 

// Нет необходимости в навигации, чтобы толкать или показать

if ([segue.destinationViewController isKindOfClass:[AddCategory class]]) { 
    AddCategory *controller = (AddCategory *)segue.destinationViewController; 
    controller.categoryText = sender; 
} 
if ([segue.identifier isEqualToString:@"AddCategory"]) { 
    //进入到下一步骤 :只作为传值使用 
//specilized 

}else if ([segue.identifier isEqualToString:@"AddCategory2"]){ 

} 

}

0

В моем случае первый толчок был не достаточно быстро, так что я столкнулся с такой же проблемой. Исправлено было проверить ситуацию:

if (targetViewController == self.navigationController?.topViewController) { 
    NSLog("ignore double") 
} else { 
    self.navigationController!.pushViewController(targetViewController, animated: true) 
}