crash日志:
*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <XXXViewController 0x7ff158707f80> for the key path "xxx" from <XXXViewController 0x7ff158707f80> because it is not registered as an observer.'
分析原因:在使用KVO时,add observer和remove observer都是配对出现的,首先添加成为观察者,然后在释放内存的时候移除。例如:
override func viewDidLoad() {
super.viewDidLoad()
AppUnreadNumManager.instance.addObserver(self, forKeyPath: "xxx", options: .new, context: nil)
}
deinit {
AppUnreadNumManager.instance.removeObserver(self, forKeyPath: "xxx", context: nil)
}
通常情况下,这样写是没有问题的,但是有时候控制器可能还没有加载(viewDid