当我不知道观察者时,如何防止异常" An instance was deallocated while key value observers were still registered with i



我得到以下KVO NSInternalConferencyException

> An instance 0x61800005a610 of class portController was deallocated
> while key value observers were still registered with it. Current
> observation info: "<NSKeyValueObservationInfo 0x610000055f90> (
> <NSKeyValueObservance 0x6100000c25a0: Observer: 0x6180000c7460, Key
> path: serialPortManager.availablePorts, Options: <New: NO, Old: NO,
> Prior: NO> Context: 0x0, Property: 0x608000080d20> ")

serialPortManager是单例[ORSSerialPortManager sharedSerialPortManager]。当然,显而易见的答案是使用

[portController removeObserver:observer forKeyPath:@"serialPortManager.availablePorts"];

问题是,我不知道Observer是谁:0x6180000c7460。密钥路径设置在IB(情节提要)中,其中NSPopUpButton的内容绑定到viewController,keyPath self。portController.serialPortManager.availablePorts.portController对serialPortManager的引用较弱。

我试着通过终端中的侏儒转储查找dSYM中观察者的地址,但没有成功。这是新事物吗?我不记得以前在绑定方面遇到过这些问题。

编辑:我没有明确说明,但NSPopUpButton的地址是,而不是观察员的地址。

编辑2:我已经实现了@Martin Brugger对Objective C:Object Deallocated的解决方案,而键值观察者仍在注册,这就是为NSKVODeallocateBreak添加符号断点。不幸的是,从未到达断点,但错误仍然显示在控制台中。我开始觉得我应该提交一份错误报告。

将remove-observer调用放入类的dealloc方法中。

最新更新