繁体   English   中英

如何避免在主/详细iOS应用中出现多个DetailViewController实例?

[英]How to avoid multiple instances of DetailViewController in master/detail iOS app?

在我的从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的单个/相同实例?

lionserdar的评论提供了导致解决方案的提示。 我在MasterViewController中持有对detailViewController的强烈引用,这通过允许对象持久存在而产生了问题,从而使额外的观察者可以查看AVPlayer中的事件。 我进行了两项更改以解决问题:

  • 我在MasterViewController中取消了对DetailViewController的强烈引用;
  • 我覆盖了detailViewController的dealloc方法,在该方法中,我删除了之前添加的观察者。

谢谢您的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM