使用showDetailViewController时,UISplitViewController崩溃

时间:2015-01-02 01:18:20

标签: ios uisplitviewcontroller exc-bad-access

在我的主视图中,我有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管理所有细节,而你不必在自己的类中。

任何人都可以在这里看到错误吗?

1 个答案:

答案 0 :(得分:2)

我已经确认您遇到了崩溃。在改变iPad的旋转时总会发生这种情况 无论如何,我们似乎需要实现-targetDisplayModeForActionInSplitViewController:的{​​{1}}并返回UISplitViewControllerDelegate以外的任何值。

UISplitViewControllerDisplayModeAutomatic