Установка точки останова на NSKVODeallocateBreak - PullRequest
10 голосов
/ 19 сентября 2011

Я играю с комплектом карт и создал аннотацию.Я пытаюсь найти свою ошибку из-за этой ошибки:

Экземпляр 0x1b7ac0 класса AddressAnnotation был освобожден, в то время как наблюдатели значения ключа все еще были зарегистрированы в нем.Информация наблюдений была утечка, и даже может быть ошибочно привязана к какому-либо другому объекту.Установите точку останова на NSKVODeallocateBreak, чтобы остановиться здесь в отладчике.Вот текущая информация наблюдения:

Я не уверен, где находится NSKVODeallocateBreak для установки точки останова.Я думал, что смогу использовать инструменты для его отладки, но когда я пытаюсь, он падает, не давая мне никаких указаний на то, где он упал.Есть мысли?

Ответы [ 2 ]

16 голосов
/ 19 сентября 2011

Вы, вероятно, делаете что-то подобное в своем коде:

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

Это означает, что вы регистрируете наблюдателя, чтобы узнать, когда была выбрана аннотация.

Вы должны удалить наблюдателя, когда аннотация удаляется с карты, например:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

Это должно устранить ошибку.Если этого не происходит, и вы хотите отладить его, вам, безусловно, следует установить точку останова на NSKVODeallocateBreak.Для этого откройте меню Run, Manage Breakpoints, Add symbolic breakpoint, введите NSKVODeallocateBreak и вот, пожалуйста.

Надеюсь, это поможет!

5 голосов
/ 14 октября 2013

Чтобы установить точку останова здесь с LLDB, запустите ваше приложение, затем приостановите его и в приглашении отладки LLDB напишите:

breakpoint set --name NSKVODeallocateBreak

Теперь у вас есть точка останова. Надеюсь, это поможет вам найти проблему, которая, вероятно, будет описана @ frowing

...