从NSObject推送几个viewcontroller

时间:2013-04-17 15:33:02

标签: ios uistoryboardsegue navigationcontroller

我遇到了一个问题,我无法解决它!

情景是下一个: - 我有4个视图控制器(主视图控制器是UITableView,settingsVC,messsageDetailController和moreInfoVC)。 - 我还有一个监听器(NSObject)正在监听端口以接收不同的事件。

然后,功能是下一个: - 我启动监听器来接收这些事件。当监听器收到一个新事件时,该监听器与mainViewController通信,并从这个mainVC创建一个新的messageDetailController实例。 *我使用以下代码(mainVC):

[self performSegueWithIdentifier:@"MessageDetail" sender:self];

我获得了所有这些功能,但是当我的监听器收到多个事件然后我创建了多个messageDetailController引用时,我的问题就开始了。这个问题直接影响到我的NavigationController,它正在弹出下一条消息: - 嵌套推送动画可能导致导航栏损坏 - 对开始/结束外观转换的不平衡调用。 - 在意外状态下完成导航过渡。导航栏子视图树可能已损坏。

我希望我能正确解释自己,任何人都可以帮助我。

2 个答案:

答案 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]];