2011-05-12 59 views
17

我在向核心數據模型中添加2個附加字段後遇到了以下錯誤。目標C:對象釋放,而關鍵值觀察者仍然在其中註冊

CarPark_CarPark_ was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. 
Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. 
Here's the current observation info: 
<NSKeyValueObservationInfo 0x1b6510> (
<NSKeyValueObservance 0x19b210: Observer: 0x1a8cf0, Key path: coordinate, 
Options: <New: NO, Old:  NO, Prior: YES> Context: 0x0, Property: 0x1b7e00> 
) 

我下一步該怎麼做有點失落。任何有關這方面的指導將非常感激!請讓我知道還有哪些其他信息是必需的。

+0

你是否按照建議在NSKVODeallocateBreak上設置斷點?這可以幫助你找出問題的來源。 – omz 2011-05-12 19:56:25

+0

@omz,請原諒我的無知,我該如何在NSKVODeallocateBreak上設置這個斷點? – Zhen 2011-05-13 01:55:04

+0

我沒有在我的應用程序中設置任何oberservers。但這實際上意味着什麼? 「這是當前的觀察信息: 上下文:0x0,屬性:0x1ac3e0> 「 – Zhen 2011-05-13 04:26:42

回答

28

設置斷點打開在Xcode 4(在Xcode 3斷點窗口)斷點選項卡,並添加一個新的符號斷點符號「NSKVODeallocateBreak」

使用調試器控制檯,給出的ADRESS打印觀察者在觀測信息

觀察報:0x19af20

po 0x19af20 

這應該給出關於觀察員一些有價值的信息。 在您的自定義CarPark類中覆蓋addObserver:forKeyPath:options:context:並設置一個斷點以查看正在建立的觀測的確切位置。

+0

太棒了!偉大的方式來找到泄漏 – HotJard 2013-08-08 13:31:58

9

這可能是由於觀察者在觀察對象之前被釋放。您需要實施- (void)dealloc方法來刪除觀察者中的所有觀察對象。

相關問題