在NSKVODeallocateBreak处设置断点

问题描述:

我在玩地图工具包,并创建了一个注释。我试图找到我的错误是由于这个错误:在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在是设置一个断点。我想我可以使用乐器来调试它,但是当我尝试时,它会崩溃而不会告诉我它坠毁的位置。有什么想法吗?

你可能会做这样的事情在你的代码:

[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

要在这里设置断点与LLDB,开始您的应用程序,然后暂停,并在LLDB调试提示写:

breakpoint set --name NSKVODeallocateBreak 

现在你已经有了一个断点设置在那里。希望这应该会帮助你找到问题,这可能是由@frowing描述的种类

+0

有没有一种方法可以将它设置在其他地方,而无需每次都在LLDB调试提示符中输入它? – Hlung