【问题标题】:Remove KVO observer issue删除 KVO 观察者问题
【发布时间】:2014-07-25 08:19:20
【问题描述】:
我有一个通过弱引用与视图控制器连接的菜单控制器。视图控制器对菜单控制器有很强的引用。
菜单控制器在视图控制器中观察集合视图的某些属性。
当菜单控制器被释放时,我调用[self.viewController.collectionView removeObserver:self forKeyPath:keyPath]; 但是在这个地方 self.viewController 已经为零了。
我应该在什么地方移除 KVO 观察者?
【问题讨论】:
标签:
objective-c
key-value-observing
【解决方案1】:
我相信你会以其他方式做到这一点。
您应该在视图控制器中添加观察者,而不是在菜单控制器中:
[object addObserver:menuController forKeyPath:@"openingBalance" ...];
只需将菜单控制器作为参数传递给addObserver: 方法并在菜单控制器中实现observeValueForKeyPath: 方法。
您可以在需要时移除观察者(我相信您想在 dealloc 方法中这样做),仍然在视图控制器中,在这种情况下,当您的视图控制器将被释放时,它首先移除观察者。