我有一个基于故事板的应用程序。在故事板中我定义了一个模态segue,其中包含一个包含UVviewController的UINavigationController。在prepareForSegue
方法期间,代码为:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *destinationViewController = [segue destinationViewController];
if ([destinationViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navController = (UINavigationController *)destinationViewController;
UIViewController *topController = navController.topViewController;
if ([topController isMemberOfClass:[FilterBaseViewController class]]) {
FilterBaseViewController *filterController = (FilterBaseViewController *)topController;
filterController.dismissalDelegate = self;
}
}
}
如上所示,我做了很多检查,以确保我可以访问的每个控制器实际上我正在寻找的控制器。但是我的代码变得冗长。知道我的故事板的布局我不能只说:
UIViewController * topController = ((UINavigationController *)destinationViewController).topViewController;
((FilterBaseViewController *)topController).dismissalDelegate = self;
知道我的演员表是正确的并且我得到的实例属于所需的类吗?是否确实需要所有以前的检查?
感谢。
答案 0 :(得分:0)
如果您将多个segue表单添加到另一个控制器,您将收到崩溃。如果我是你,我会检查segue标识符。检查类类型是没用的。
NSString *identifier = segue.identifier;
if ([identifier isEqualToString:@"Edit"]) {
UIViewController * topController = ((UINavigationController *)destinationViewController).topViewController;
((FilterBaseViewController *)topController).dismissalDelegate = self;
}