我遇到了一个问题,我无法解决它!
情景是下一个: - 我有4个视图控制器(主视图控制器是UITableView,settingsVC,messsageDetailController和moreInfoVC)。 - 我还有一个监听器(NSObject)正在监听端口以接收不同的事件。
然后,功能是下一个: - 我启动监听器来接收这些事件。当监听器收到一个新事件时,该监听器与mainViewController通信,并从这个mainVC创建一个新的messageDetailController实例。 *我使用以下代码(mainVC):
[self performSegueWithIdentifier:@"MessageDetail" sender:self];
我获得了所有这些功能,但是当我的监听器收到多个事件然后我创建了多个messageDetailController引用时,我的问题就开始了。这个问题直接影响到我的NavigationController,它正在弹出下一条消息: - 嵌套推送动画可能导致导航栏损坏 - 对开始/结束外观转换的不平衡调用。 - 在意外状态下完成导航过渡。导航栏子视图树可能已损坏。
我希望我能正确解释自己,任何人都可以帮助我。
答案 0 :(得分:0)
您可能不希望使用segue来执行您在此处尝试执行的操作,因为segue始终会创建一个新的视图控制器。最好在代码中推送到messageDetailController,这样你就可以在那里放一个if子句,只有当一个不存在时才创建并推送控制器。当第二个事件进入时,您只想更改正在显示的内容的值。代码可能是这样的(在主视图控制器中,我猜,如果这是从侦听器获取信息的那些)。
if (! messageDetailController) {
MessageDetailController *messageDetailController = self.storyboard instantiateViewControllerWithIdentifier:@"MessageController"];
messageDetailController.detailItem = infoFromListener;
[self.navigationController pushViewController:messageDetailController animated:YES];
}else{
messageDetailController.detailItem = infoFromListener;
}
答案 1 :(得分:0)
解决方案:
NSMutableArray *array = [NSMutableArray arrayWithArray::self.navigationController.viewControllers];
for(NSInteger i = ([array count] - 1); i > 0; i--)
if(i != 0)
[array removeObjectAtIndex:i];
self.navigationController.viewControllers = array;
[self performSegueWithIdentifier:@"MessageDetail" sender:[settingsReference actualView]];