我一直在我的NSOutlineView中的NSTableCellView中使用Cocoa绑定,但是将我自己的数据提供给outlineView objectValueForTableColumn:byItem:
方法(即不使用NSArrayController作为内容)。它工作正常,直到我从表中删除一行,我从中获取托管对象并从上下文中删除它,并在NSManagedObjectContextWillSaveNotification观察器中,我更新我的数据模型并从outlineView中删除行。但是当我这样做时,我收到了这个警告:
类Log_Log_的实例0x10d922890在键时被释放 价值观察员仍在注册。观察信息是 泄露,甚至可能被错误地附着在其他物体上。 在NSKVODeallocateBreak上设置断点以在调试器中停止。 这是当前的观察信息....
设置断点并不能真正帮助识别问题。我知道有些东西正在观察Log上的属性(正在进行绑定的tableCellView)但是当从大纲视图中删除行时如何清理它?我重写了Log didTurnIntoFault
,我在self.observationInfo中获得了一个非零值,但我认为这不能帮助确定需要删除的观察对象是什么观察者此时此刻。
我不确定为什么会发生这种情况,以及调试此问题的最佳方法是找到违反对象'绑定'观察者。
答案 0 :(得分:1)
NSTableCellViews被保存以供重复使用,因此你的zombie-esque cellView会保留在objectValue上。删除行时,您可能希望在单元视图中忽略objectValue。
为此可以使用NSTableViewDelegate didRemoveRowView:forRow。