10

我正在玩地图工具包并创建了一个注释。由于此错误,我试图找到我的错误:

AddressAnnotation 类的实例 0x1b7ac0 已被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前的观察信息:

我不确定 NSKVODeallocateBreak 在哪里设置断点。我以为我可以使用 Instruments 来调试它,但是当我尝试时,它崩溃了,却没有给我任何关于它崩溃的迹象。有什么想法吗?

4

2 回答 2

16

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

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

这意味着您正在注册观察者以了解何时选择了注释。

当注释从地图中删除时,您应该删除观察者,如下所示:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

那应该消除错误。如果它没有并且你想调试它,你当然应该在NSKVODeallocateBreak. 为此,请打开Run菜单、Manage BreakpointsAdd symbolic breakpoint、 输入NSKVODeallocateBreak,然后就可以了。

希望能帮助到你!

于 2011-09-19T06:55:44.543 回答
6

要使用 LLDB 在此处设置断点,请启动您的应用程序,然后暂停它,并在 LLDB 调试提示符处写入:

breakpoint set --name NSKVODeallocateBreak

现在你已经在那里设置了一个断点。希望这可以帮助您找到问题,这可能是@frowing 所描述的那种

于 2013-10-14T06:58:56.557 回答