34

尝试在我的 segue 中设置属性时发生崩溃。它是一个 UIView 将属性传递给以 TableView 作为其根视图的导航控制器。它应该转到我的 TableViewController,但看起来它被该 NavigationController 拦截并引发无法识别的选择器错误。

转场:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showItems"]) {
        ShowItemsTableViewController *destinationViewController = [segue destinationViewController];

        [destinationViewController setItems:[self itemsFromCoreData]];
    }
}

错误:

-[UINavigationController setItems:]: unrecognized selector sent to instance 0x10920c840

这里发生了什么?NavigationController 没有与之关联的类,它只是在情节提要中并以模态方式出现。如果我将情节提要中的 segue 设置为直接转到视图,而不是 NavigationController,它会起作用,但我确实需要那里的导航。我该如何解决这个问题?

4

4 回答 4

75

由于目标视图控制器实际上是导航控制器,请尝试像这样访问根视图:

UINavigationController *navController = [segue destinationViewController];
ShowItemsTableViewController *SITViewController = (ShowItemsTableViewController *)([navController viewControllers][0]);
[SITViewController setItems:[self itemsFromCoreData]];
于 2013-11-04T18:37:24.077 回答
8

从 UINavigationController 中获取 topViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showItems"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        ShowItemsTableViewController *showItemsTVC = (ShowItemsTableViewController * )navigationController.topViewController;
        showItemsTVC.items = [self itemsFromCoreData];
    }
}
于 2013-11-04T18:44:01.923 回答
8

对于斯威夫特:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segueShowNavigation" {
        var DestViewController = segue.destinationViewController as! UINavigationController
        let targetController = DestViewController.topViewController as! ReceiveViewController
    }
}
于 2016-05-05T20:25:47.957 回答
0

查看为 segue 做准备的视图控制器类 - 它是导航控制器。将其转换为该类,然后您可以通过询问其顶部视图控制器来获得所需的视图。

于 2013-11-04T18:36:46.933 回答