我正在尝试使用 UISplitViewController 和 Storyboard 组合一个 iPad 应用程序。主视图从一个导航 Controller 开始,该 Controller 链接到一个包含 6 个菜单选项的表格 View 。表格中的每个单元格将不同的表格 View Controller 推送到导航堆栈上。这适用于主视图。每个主视图都有一个表列表,单击该列表时需要在详细信息 Pane 中显示不同的 View Controller 。我目前通过将 segue 设置为“替换”和“详细拆分”来完成此操作,这在第一次单击一行时起作用,但是一旦您在主视图中单击另一行或旋转设备,应用程序就会崩溃与 EXC_BAD_ACCESS。
我相当确定我的问题与如何为 UISplitViewController 设置委托(delegate)有关。当我有多个主 VC 和多个详细 VC 时,我对如何使用它感到困惑。委托(delegate)代码应该放在哪里 - master 还是 detail?我是否必须在每个 View Controller 中实现 UISplitViewControllerDelegate 协议(protocol)事件?
感谢任何帮助。
最佳答案
如果 Split View Controller 委托(delegate)是已被替换的详细 View Controller ,这就是崩溃的原因。替换的详细 View Controller 正在被释放,因此 Split View Controller 委托(delegate)不再是对有效对象的引用。
您可以在 prepareForSegue:sender: 中更新委托(delegate)。例如:
- (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;
}
}
}
您将哪些 View Controller 用于委托(delegate)取决于您的 View Controller 层次结构。在最简单的情况下,分配给 splitVC detail 的任何 View Controller 可能都需要是委托(delegate)。您可能希望将它们全部基于处理共享 Split View Controller 委托(delegate)逻辑的公共(public)父类(super class)。
关于iOS - 带有 Storyboard的 UISplitViewController - 多个主视图和多个详细 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10538231/