在我的主视图中,我有4个静态表行。其中2行向下钻取到主视图中的详细视图,另外2行替换详细视图的内容。我通过适当地调用showViewController()和showDetailViewController()函数来控制didSelectRowAtIndexPath()方法会发生什么:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0) {
Master2TVC *m2tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"master-2"];
[self showViewController:m2tvc sender:self];
} else if (indexPath.row == 1) {
Master3TVC *m3tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"master-3"];
[self showViewController:m3tvc sender:self];
} else if (indexPath.row == 2) {
Detail2VC *d2vc = [self.storyboard instantiateViewControllerWithIdentifier:@"detail-2"];
[self showDetailViewController:d2vc sender:self];
} else if (indexPath.row == 3) {
Detail3VC *d3vc = [self.storyboard instantiateViewControllerWithIdentifier:@"detail-3"];
[self showDetailViewController:d3vc sender:self];
}
}
Master-Detail模板的模板创建从主视图到详细视图的引用:
self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
如果我理解正确,则存在此引用,以便主方可以向详细信息侧发送消息。在我的情况下,我的详细信息视图的类将更改(Detail3VC,Detail2VC等),所以我决定删除此行并以另一种方式进行消息传递;但是,现在当我加载任何新的细节视图并更改iPad的旋转时,应用程序有时会因错误EXC_BAD_ACCESS而崩溃。
据我了解,EXC_BAD_ACCESS通常意味着有一个对象悬挂在某个不应该的地方。我在Apple文档中找不到任何关于在使用showDetailViewController()调用时必须更改其他内容的内容。事实上,我认为使用showDetailViewController()的原因是splitViewController管理所有细节,而你不必在自己的类中。
任何人都可以在这里看到错误吗?
答案 0 :(得分:2)
我已经确认您遇到了崩溃。在改变iPad的旋转时总会发生这种情况
无论如何,我们似乎需要实现-targetDisplayModeForActionInSplitViewController:
的{{1}}并返回UISplitViewControllerDelegate
以外的任何值。
UISplitViewControllerDisplayModeAutomatic