prepareForSegue和代表

我有两个赛段的应用程序。 在其中一个segues中,当前的视图控制器成为代表,而另一个则不成立。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"MoreOptions"]) { UINavigationController *navigationController = segue.destinationViewController; MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController; controller.delegate = self; } else if ([segue.identifier isEqualToString:@"FullStoryView"]) { SingleStoryViewController *detailViewController = segue.destinationViewController; detailViewController.urlObject = sender; } } 

所有这一切工作正常,但我想尝试和更好地理解代码。 我不明白的是,我必须通过从navigationController.topViewController抓取它而不是简单地从segue.destinationViewController像我在第二条件如果条件获取引用的MoreOptionsViewController。 是因为我设置当前的视图控制器(自我)作为委托? 再次,我不是在试图解决问题,只是为了更好地理解发生的事情。

看看你的故事板,这应该是明显的原因是这样的。 您已经在UINavigationControllerembedded了MoreOptionsViewController ,并将一个segue连接到导航控制器,从而使其成为destinationViewController 。 这是相当普遍的。

代表在很大程度上与您的问题无关。

您的第一个segue的目标是一个导航控制器,其中包含您真正感兴趣的视图控制器。因此,要进入该视图,您需要通过导航控制器,因为它没有任何您有兴趣设置的属性。

你的第二个segue直接到一个单一的视图控制器,所以你可以直接访问它。