2011-09-19 41 views
10

Estoy jugando con el kit de mapa y creé una anotación. Estoy tratando de encontrar mi error debido a este error:Configuración de punto de interrupción en 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:

No estoy seguro de que cuando NSKVODeallocateBreak para establecer un punto de interrupción en los ves. Pensé que podría usar Instruments para depurarlo, pero cuando lo intento, se bloquea sin darme ninguna indicación de dónde se colgó. ¿Alguna idea?

Respuesta

16

Usted probablemente está haciendo algo como esto en su código:

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

Eso significa que se está registrando un observador para saber cuando una anotación ha sido seleccionado.

Debe eliminar el observador cuando la anotación se elimina del mapa, así:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

Eso debería eliminar el error. Si no lo hace y desea depurarlo, definitivamente debe establecer un punto de interrupción en NSKVODeallocateBreak. Para hacer esto, abra el menú Run, Manage Breakpoints, Add symbolic breakpoint, ingrese NSKVODeallocateBreak y allí está.

Espero que ayude!

+0

. De hecho, estoy agregando una anotación que es un ivar. Cuando trato de moverlo después de un par de veces, obtengo ese error. Al agregar un pin (anotación al mapView), ¿estoy implícitamente agregando un observador? Gracias. – Crystal

+6

Para establecer el punto de corte simbólico en Xcode 4, cambie al navegador de punto de interrupción y haga clic en el botón más pequeño en la parte inferior. (a través de https://devforums.apple.com/thread/68421) – Palimondo

5

Para establecer un punto de interrupción aquí con LLDB, inicie su aplicación, a continuación, hacer una pausa, y al LLDB pronta depuración de escritura:

breakpoint set --name NSKVODeallocateBreak 

Ahora usted tiene un punto de interrupción establecido allí. Espero que esto te ayude a encontrar el problema, que probablemente será del tipo descrito por @frowing

+0

¿hay alguna manera de configurar esto en otro lugar sin tener que escribir esto en el prompt de depuración de LLDB todo el tiempo? – Hlung

Cuestiones relacionadas