iOS – 具有故事板的UISplitViewController – 多个主视图和多个详细视图

我正在尝试使用UISplitViewController和storyboard来组合一个iPad应用程序。 主视图从导航控制器链接到6个菜单选项的表格视图开始。 表格中的每个单元格将不同的表格视图控制器推入导航堆栈。 这对主视图工作正常。 每个主视图都有一个表格列表,单击时需要在详细信息窗格中显示不同的视图控制器。 我目前已经做了一个segue设置为'replace'和'细节拆分',这是第一次点击一行,但一旦你点击主视图中的另一行,或旋转设备,然后应用程序崩溃与EXC_BAD_ACCESS。

我相当确定我的问题是如何为UISplitViewController设置代理。 我很困惑,当我有多个主VC和多个VC细节时,应该如何使用它。 代表代码应放在哪里 – 主人还是细节? 我必须在每个视图控制器中实现UISplitViewControllerDelegate协议事件吗?

任何帮助赞赏。

如果拆分视图控制器委托是已被replace的详细视图控制器,这是崩溃的原因。 被replace的详细信息视图控制器正在解除分配,所以分割视图控制器委托不再是一个有效的对象的引用。

您可以在prepareForSegue:sender:中更新委托。 例如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"MySegue"]) { UIViewController *destinationViewController = [segue destinationViewController]; if ([destinationViewController conformsToProtocol:@protocol(UISplitViewControllerDelegate)]) { self.splitViewController.delegate = destinationViewController; } else { self.splitViewController.delegate = nil; } } } 

您用于委托的视图控制器依赖于您的视图控制器层次结构。 在最简单的情况下,任何分配给splitVC细节的视图控制器都可能需要委托。 你可能想把它们全部放在共同的分离视图控制器委托逻辑的超类上。