2010-04-28 2 views
17

Ich habe einen Viewcontroller eine Instanz eines UIView zu schaffen und dann zu registrieren, I einen Beobachter mit der Instanz, so dassobserveValueForKeyPath nicht aufgerufen wird

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

dann, in der gleichen Datei, ich habe:

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

Aber, obwohl ich eingecheckt haben und doppelt geprüft, dass logoAnimation.patrocinioDidLoad geändert hat, observeValueForKeyPath nie aufgerufen wird ...

Bin ich etwas fehlt?

Danke für die Hilfe!

Antonio

Antwort

20

es gelöst: Ich wurde direkt patrocinioDidLoad in Logoanimation Einstellung, ohne Standard-Getter und Setter zu verwenden. In Logoanimation,

patrocinioDidLoad = YES; 

hat nicht funktioniert, während

self.patrocinioDidLoad = YES; 

tat!

+0

danke du hast mein Problem gelöst Für mich etwas wie logoAnimation = [[MainLogoAnimation Alloc] init]; hat nicht funktioniert aber self.logoAnimation = [[MainLogoAnimation alloc] init] autorelease]; funktioniert. – ssj

+0

Sie müssen also immer "selbst" in den Vordergrund stellen, wenn Sie die von @synthesize erstellten Setter und Getter verwenden möchten? – gonzobrains

+0

WOW! Nach stundenlangem Testen meines Codes, um herauszufinden, warum observValueForKeyPath nie aufgerufen wurde, fand ich schließlich heraus, dass dies der Grund war. Warum macht Apple es nicht in der Dokumentation fett, dass man durch den Setter gehen muss (und somit die Eigenschaft anstelle des Ivar verwenden muss), damit es funktioniert? – ArtOfWarfare