0

我正在为一个问题而烦恼,我无法解决它!

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

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

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

我得到了所有这些功能,但是当我的侦听器接收到多个事件时,我的问题就开始了,因此,我创建了多个 messageDetailController 引用。这个问题直接影响到我的 NavigationController,它会弹出下一条消息: - 嵌套推送动画可能导致导航栏损坏 - 对 . - 在意外状态下完成导航转换。导航栏子视图树可能会损坏。

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

4

2 回答 2

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;
}
于 2013-04-17T16:17:20.983 回答
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]];
于 2013-04-18T16:53:30.847 回答