如何在主/详细iOS应用程序中避免使用DetailViewController的多个实例?

时间:2018-01-27 20:44:06

标签: ios objective-c

在我的master-detail应用程序中,从Xcode模板创建,看来在MasterViewController的prepareForSegue中,目标视图控制器永远不是我的DetailViewController的同一实例 - 我每次都得到一个新实例:

    DetailViewController    *detailController = (DetailViewController *)[[segue destinationViewController] topViewController];

此外,segue.destinationViewController.topViewController与masterViewController启动时获得的detailViewController不同。在MasterViewController viewDidLoad中:

    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];

这对我来说是个问题,因为我的detailViewController安装了来自AVPlayer对象的事件的观察者,观察者必须配对:addObserver / removeObserver。如果一个实例没有删除观察者,我会收到多个接收通知的实例。

有没有办法确保我总是使用一个/同一个DetailViewController实例?

1 个答案:

答案 0 :(得分:0)

lionserdar的评论提供了一个导致解决方案的提示。我在MasterViewController中持有对detailViewController的强引用,它通过允许对象持久化来创建问题,从而为AVPlayer中的事件启用额外的观察者。我做了两个更改来解决问题:

  • 我在MasterViewController中删除了对DetailViewController的强引用;
  • 我覆盖了detailViewController的dealloc方法,在那个方法中我删除了以前添加的观察者。

感谢您的帮助。