2012-05-10 120 views
7

我试图将使用UISplitViewController和故事板的iPad应用放在一起。主视图以链接到6个菜单选项的表格视图的导航控制器开始。表格中的每个单元格将不同的表格视图控制器压入导航堆栈。这对主视图工作正常。每个主视图都有一个表格列表,单击时需要在详细信息窗格中显示不同的视图控制器。我目前使用segue设置为'Replace'和'Detail Split'来完成这项工作,这是第一次点击某行时的作用,但只要您在主视图中点击另一行,或者旋转设备,则应用程序崩溃与EXC_BAD_ACCESS。iOS - 具有故事板的UISplitViewController - 多个主视图和多个详细视图

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

任何帮助表示赞赏。

回答

16

如果拆分视图控制器委托是已被替换的详细视图控制器,则这是导致崩溃的原因。替换的详细视图控制器正在解除分配,因此分割视图控制器委托不再是对有效对象的引用。

您可以更新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细节的视图控制器都可能需要委托。您可能希望将它们都基于处理共享的分割视图控制器委托逻辑的公共超类。

+0

非常感谢克里斯,很好的解释。 –

+0

救了我一天。 –

+0

这真的帮助我了! – Fogh

相关问题