UISplitViewController中开始/结束外观转换的不平衡调用

时间:2015-12-27 18:42:15

标签: uinavigationcontroller swift2 ios9 uisplitviewcontroller

我的UISplitViewController基本上像魅力一样,只是在第一次(仅第一次!)从主表视图转换到详细视图时显示一条恼人的错误消息。

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>.

主视图和详细视图控制器都嵌入在UINavigationController中。但是,只有在设置以下内容时才会出现错误(这是iPhone上逻辑行为所必需的):

class MySplitViewController: UISplitViewController, UISplitViewControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
        return true
    }
}

如果有人能提供这个问题的解决方案,那将是很好的,在此先感谢。

BTW:拆分视图控制器已在故事板中设置

呈现详细视图控制器是在tableView:didSelectRowAtIndexPath:方法中完成的,如下所示:

if let detailViewController = delegate as? DetailViewController {
    detailViewController.navigationItem.leftItemsSupplementBackButton = true
    detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem()
    splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self)
}

2 个答案:

答案 0 :(得分:2)

最有可能的是,您在UITableView中从主人(UIViewController中的UIViewController)到详细(UISplitViewController)视图的第一次转换是在活动/当前视图之前启动的完成展示自己。

可能的原因是您可能尝试在主人viewDidLoad()的{​​{1}}方法中显示详细信息视图的第一个“实例”?在这种情况下,您的应用可能会尝试在主视图完成显示之前显示详细视图 。请注意视图加载视图和视图确实显示之间的区别:

  

覆盖func viewDidLoad()

     

说明

     

在控制器的视图加载到内存后调用。

     

在视图控制器加载其视图后调用此方法   层次结构到内存

           

覆盖func viewDidAppear(动画:Bool)

     

说明

     

通知视图控制器其视图已添加到视图中   层次结构。您可以覆盖此方法以执行其他任务   与呈现视图相关联。

现在,由于您的问题未显示如何加载初始详细信息视图,因此您可能已经注意到以下建议,但无论如何:如果您的详细信息视图来自UIViewController,请尝试移动这是viewDidLoad()方法:

viewDidAppear()

答案 1 :(得分:0)

这可能为时已晚,但无论如何,我使用perform segue而不是showDetailViewController来解决这个问题