2011-09-19 111 views
10

我在玩地圖工具包,並創建了一個註釋。我試圖找到我的錯誤是由於這個錯誤:在NSKVODeallocateBreak處設置斷點

An instance 0x1b7ac0 of class AddressAnnotation 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:

我不知道哪裏是NSKVODeallocateBreak在是設置一個斷點。我想我可以使用樂器來調試它,但是當我嘗試時,它會崩潰而不會告訴我它墜毀的位置。有什麼想法嗎?

回答

16

你可能會做這樣的事情在你的代碼:

[addressAnnotation addObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath options:NSKeyValueObservingOptionNew context:@"selectedOrDeselected"];

這意味着,您要註冊一個觀察者發現時已選定的註釋。

當註釋被從地圖上刪除,這樣你應該刪除觀察者:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

這應該刪除錯誤。如果沒有,並且你想調試它,你當然應該在NSKVODeallocateBreak上設置一個斷點。爲了做到這一點,打開Run菜單,Manage Breakpoints,Add symbolic breakpoint,輸入NSKVODeallocateBreak,你就在那裏。

希望它有幫助!

+0

我實際上只是添加一個註釋是一個伊娃。當我嘗試移動它幾次後,我得到了這個錯誤。通過添加一個pin(註解mapView),我隱式添加一個觀察器嗎?謝謝。 – Crystal

+6

要設置Xcode 4中的符號斷點,請切換到斷點導航器並單擊底部的小加號按鈕。 (通過https://devforums.apple.com/thread/68421) – Palimondo

5

要在這裏設置斷點與LLDB,開始您的應用程序,然後暫停,並在LLDB調試提示寫:

breakpoint set --name NSKVODeallocateBreak 

現在你已經有了一個斷點設置在那裏。希望這應該會幫助你找到問題,這可能是由@frowing描述的種類

+0

有沒有一種方法可以將它設置在其他地方,而無需每次都在LLDB調試提示符中輸入它? – Hlung