中止 - 导航控制器消失了

时间:2013-02-16 15:21:29

标签: ios uinavigationcontroller storyboard segue

按下按钮时会抛出异常。该按钮与segue相关联(故事板的一部分。

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'changeRooms'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

调用堆栈没有提示抛出异常的位置。在尝试深入研究时,我在prepareForSegue中找到了以下内容:(在选择视图控制器RoomsListTVC.m时选择了DCVC.m)

NSLog (@"navController1: %@", self.navigationController);
NSLog (@"navController2: %@", [[segue destinationViewController] navigationController]);

创建输出:

2013-02-16 15:41:57.201 Wohnungsprotokoll[1906:c07] navController1: (null)
2013-02-16 15:41:57.203 Wohnungsprotokoll[1906:c07] navController2: (null)

在那个阶段,我有点期望destinationViewController还没有分配navigationController。这就是我将其与其他视图控制器的prepareForSegue中的状态进行比较的原因。它们都产生相同的输出:( KeysEditVC.m - 从这里被sedued到ChooseRoomVC)

NSLog (@"navControllerx: %@", self.navigationController);
NSLog (@"navControllery: %@", [[segue destinationViewController] navigationController]);

输出:

2013-02-16 15:41:52.181 Wohnungsprotokoll[1906:c07] navControllerx: <UINavigationController: 0xa22c5d0>
2013-02-16 15:41:52.182 Wohnungsprotokoll[1906:c07] navControllery: (null)

所以我在viewDidLoad(chooseRoomVC.m)中检查了self.navigationController,只是为了看看是否出现了问题,将错误传递给有问题的视图控制器。但这看起来不错:

NSLog (@"navController0: %@", self.navigationController);

输出:

2013-02-16 15:41:52.212 Wohnungsprotokoll[1906:c07] navController0: <UINavigationController: 0xa22c5d0>

所以,显然,当我的视图控制器(chooseRoomVC.m)正在执行时,某种方式和某个地方导航控制器的分配会丢失。我确实添加了类似的NSLogs到viewWillAppear和viewWillDisappear以及各种self.navigationController设置正确。

我非常乐意提供代码或截图等,但我不知道从哪里开始。请指教:

为了完整性:我使用故事板和ARC,iOS 6.1,iOS模拟器以及iPhone设备,在OS-X 10.8.2上使用xcode 4.6。

只有一件事可能不寻常。我抛出错误的视图控制器,可以从许多视图控制器中进行查询。但我这样做不仅仅是这个,它在所有其他情况下都能正常工作。

1 个答案:

答案 0 :(得分:0)

现在我找到了它,因为我花了很长时间才把它钉下来并把所有东西放在一起来解决这个问题。

在IB中,我从同一视图的另一个按钮复制了与此segue关联的按钮。从这个原件复制后,还有一个动作的分配。这个IBAction方法应该与另一个按钮相关联,执行一些业务逻辑并调用

[self.navigationController popViewControllerAnimated:YES];

所以我进一步向下并且几乎同时返回到父视图控制器! 当然这不起作用。但是,我会留在这里,以便可能有同样问题的人找到比我更快的根本原因。