在我的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实例?
答案 0 :(得分:0)
lionserdar的评论提供了一个导致解决方案的提示。我在MasterViewController中持有对detailViewController的强引用,它通过允许对象持久化来创建问题,从而为AVPlayer中的事件启用额外的观察者。我做了两个更改来解决问题:
感谢您的帮助。