2011-09-19 12 views
10

Używam zestawu map i stworzyłem adnotację. Próbuję znaleźć mój błąd z powodu tego błędu:Ustawianie punktu przerwania w 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:

Nie jestem pewien gdzie to NSKVODeallocateBreak aby ustawić punkt przerwania na to. Pomyślałem, że mogę użyć Instrumentów do debugowania, ale kiedy próbuję, to zawiesza się, nie dając mi żadnego wskazania, gdzie się rozbił. jakieś pomysły?

Odpowiedz

16

Prawdopodobnie robi coś takiego w kodzie:

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

Oznacza to, że jesteś rejestracji obserwatora, aby dowiedzieć się, kiedy został wybrany adnotacja.

Należy usunąć obserwatora gdy adnotacja zostanie usunięty z mapy, jak to:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

To powinno usunąć błąd. Jeśli tak się nie stanie i chcesz go debugować, z pewnością powinieneś ustawić punkt przerwania na NSKVODeallocateBreak. Aby to zrobić, otwórz menu Run, Manage Breakpoints, Add symbolic breakpoint, wpisz NSKVODeallocateBreak i gotowe.

Mam nadzieję, że pomoże!

+0

Właśnie dodaję adnotację, która jest ivar. Kiedy próbuję go przesunąć po kilku razach, pojawia się ten błąd. Dodając pinezkę (adnotację do mapView), czy domyślnie dodaję obserwatora? Dzięki. – Crystal

+6

Aby ustawić symboliczny punkt przerwania w Xcode 4, przełącz na nawigator punktu przerwania i kliknij mały przycisk plus u dołu. (przez https://devforums.apple.com/thread/68421) – Palimondo

5

Aby ustawić punkt przerwania tutaj z LLDB, uruchom aplikację, a następnie wstrzymać je, a na LLDB szybkiego debugowania napisz:

breakpoint set --name NSKVODeallocateBreak 

Teraz masz przerwania ustawiony tam. Mam nadzieję, że powinno to pomóc w znalezieniu problemu, który prawdopodobnie będzie podobny do opisanego przez @frowing

+0

jest jakiś sposób, aby ustawić to gdzie indziej, bez konieczności wpisywania tego w wierszu debugowania LLDB za każdym razem? – Hlung

Powiązane problemy