我正在玩地图工具包,我创建了一个注释。我试图找到我的错误,因为这个错误:
类AddressAnnotation的实例0x1b7ac0已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置断点以在调试器中停止。这是当前的观察信息:
我不确定NSKVODeallocateBreak在哪里设置断点。我以为我可以使用Instruments来调试它,但是当我尝试时,它崩溃而没有给我任何指示它崩溃的地方。有什么想法吗?
答案 0 :(得分:16)
你可能在你的代码中做了类似的事情:
[addressAnnotation addObserver:self
forKeyPath:kSelectedAnnotationObserverKeyPath
options:NSKeyValueObservingOptionNew
context:@"selectedOrDeselected"];
这意味着您正在注册观察者以找出何时选择了注释。
当注释从地图中删除时,您应该删除观察者,如下所示:
[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];
那应该删除错误。如果没有并且您想要调试它,您当然应该在NSKVODeallocateBreak
上设置断点。要执行此操作,请打开Run
菜单,Manage Breakpoints
,Add symbolic breakpoint
,然后输入NSKVODeallocateBreak
。
希望它有所帮助!
答案 1 :(得分:5)
要在此处使用LLDB设置断点,启动应用程序,然后暂停它,并在LLDB调试提示符处写入:
breakpoint set --name NSKVODeallocateBreak
现在你已经设置了一个断点。希望这可以帮助您找到问题,这可能是@frowing描述的那种