2011-05-12 6 views
17

Estoy llegando al siguiente error después de agregar 2 campos adicionales a mi modelo de datos básicos.Objetivo C: objeto desasignado mientras los observadores de valores clave todavía estaban registrados con él

CarPark_CarPark_ 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: 
<NSKeyValueObservationInfo 0x1b6510> (
<NSKeyValueObservance 0x19b210: Observer: 0x1a8cf0, Key path: coordinate, 
Options: <New: NO, Old:  NO, Prior: YES> Context: 0x0, Property: 0x1b7e00> 
) 

Estoy un poco perdido en qué hacer a continuación. Cualquier orientación sobre esto será muy apreciada! Por favor, hágame saber qué otra información se requiere.

+0

¿Ha seguido la recomendación de establecer un punto de interrupción en NSKVODeallocateBreak? Eso podría ayudarte a descubrir de dónde viene el problema. – omz

+0

@omz, disculpe mi ignorancia, ¿cómo puedo establecer este punto de interrupción en NSKVODeallocateBreak? – Zhen

+0

No configuré oberservers en mi aplicación. Pero, ¿qué significa esto realmente? "Aquí está la información de observación actual: ( Contexto: 0x0, Propiedad: 0x1ac3e0> " – Zhen

Respuesta

28

Para establecer el punto de interrupción abrir la pestaña de puntos de interrupción en Xcode 4 (ventana Puntos de interrupción en Xcode 3) y añadir un nuevo punto de interrupción simbólica para el símbolo "NSKVODeallocateBreak"

Utilice la consola depurador para imprimir el observador en la dirección dada en la información de la observación

observador: 0x19af20

po 0x19af20 

Esto debería dar alguna información valiosa sobre el observador. Anular addObserver: forKeyPath: options: context: en su clase CarPark personalizada y establecer un punto de interrupción para ver la ubicación exacta de la observación establecida.

+0

fantástico! Excelente forma de encontrar fugas – HotJard

9

Probablemente se deba a que el observador fue desasignado antes de que se observaran los objetos. Debería implementar el método - (void) dealloc para eliminar todos los objetos observados en el observador.

Cuestiones relacionadas