【问题标题】:Abort - navigation controller disappeared中止 - 导航控制器消失
【发布时间】:2013-02-01 10:31:30
【问题描述】:

按下按钮时抛出异常。该按钮与 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 中发现了以下内容:(ChooseRoomVC.m 同时转到视图控制器 RoomsListTVC.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 - 从这里它被连接到 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) 正在执行时,navigationController 分配不知何故在某处丢失了。我确实添加了类似的 NSLogs 到 viewWillAppear 和 viewWillDisappear 并且 self.navigationController 设置正确。

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

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

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

【问题讨论】:

    标签: ios uinavigationcontroller storyboard segue


    【解决方案1】:

    现在我花了很长时间才确定它并将所有东西放在一起以解决这个问题。

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

    [self.navigationController popViewControllerAnimated:YES];
    

    所以我继续往下走,几乎同时返回到父视图控制器! 这自然是行不通的。但是,我将把它留在这里,这样也许有同样问题的人会比我更快地找到根本原因。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多