2010-04-28 10 views
17

He una ViewController crear una instancia de un UIView, y luego registrar un observador con la instancia, de tal manera queobserveValueForKeyPath no siendo llamado

logoAnimation = [[MainLogoAnimation alloc] init]; 
[logoAnimation addObserver:self forKeyPath:@"patrocinioDidLoad" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; 

a continuación, en el mismo archivo, que tienen:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
NSLog(@"%@ \n %@ \n %@ \n ",keyPath,object,change); 
} 

Pero, aunque he comprobado y una doble comprobación de que logoAnimation.patrocinioDidLoad ha cambiado, observeValueForKeyPath nunca se llama ...

me estoy perdiendo algo?

¡Gracias por la ayuda!

Antonio

Respuesta

20

lo resolvió: yo estaba sentado en patrocinioDidLoad logoAnimation directamente, sin necesidad de utilizar captadores y definidores estándar. En logoAnimation,

patrocinioDidLoad = YES; 

no funcionó, mientras que

self.patrocinioDidLoad = YES; 

hicieron!

+0

gracias, usted ha resuelto mi problema Para mí, algo así como logoAnimation = [[MainLogoAnimation alloc] init]; no funcionó, pero auto.logoAnimation = [[MainLogoAnimation alloc] init] autorelease]; trabajos. – ssj

+0

Entonces, ¿siempre tiene que poner "self" en el frente si quiere usar los setters y getters hechos por @synthesize? – gonzobrains

+0

¡GUAU! Después de horas de probar mi código para descubrir por qué no se llamaba alguna vez a obserValueForKeyPath, finalmente descubrí que era por eso. ¿Por qué Apple no lo audaz en los documentos que uno debe pasar por el setter (y así usar la propiedad en lugar del ivar) para que funcione? – ArtOfWarfare

Cuestiones relacionadas