2010-04-28 19 views
17

bir ViewController bir UIView örneğini oluşturma adres ve sonraobserveValueForKeyPath denir değil

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

sonra, aynı dosyada, ben bu şekilde, örneğin bir gözlemci kayıt:

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

Fakat, kontrol ettim ve logoAnimation.patrocinioDidLoad, observeValueForKeyPath çağrılan asla değiştiğini kez kontrol edilecek olmasına rağmen ...

Ben bir şey eksik?

Yardımın için teşekkürler!

Antonio

cevap

20

bunu çözüldü: Ben standart Alıcılar ve ayarlayıcılar kullanmadan doğrudan logoAnimation içinde patrocinioDidLoad batıyordu. logoAnimation,

patrocinioDidLoad = YES; 
yılında

işe

self.patrocinioDidLoad = YES; 

yaptım oysa vermedi!

+0

Sorunumu çözdüğünüz için teşekkürler Benim için logoAnimation = [[MainLogoAnimation alloc] init] gibi bir şey; çalışmadı ama self.logoAnimation = [[MainLogoAnimation alloc] init] autorelease]; Eserleri. – ssj

+0

Yani @synthesize tarafından yapılan setters ve getters kullanmak istiyorsanız her zaman "self" koymak zorunda? – gonzobrains

+0

WOW! Saatlerce süren testlerden sonra, neden obserValueForKeyPath'ın çağrılmadığını bulmak için kodumdan sonra sonunda bunun nedenini buldum. Apple neden dokumanın içinden geçmesi gerektiğine dair belgeyi (ve bunun yerine ivar yerine mülkünü kullanması) cesaretlendirmiyor? – ArtOfWarfare

İlgili konular