2010-04-28 109 views
17

我有一個視圖控制器創建一個UIView的實例,然後我在實例中註冊的觀察者,這樣observeValueForKeyPath不會被調用

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

然後,在同一文件中,我有:

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

不過,雖然我已經檢查和反覆檢查logoAnimation.patrocinioDidLoad已經改變,observeValueForKeyPath不會被調用......

我缺少的東西?

感謝您的幫助!

安東尼

回答

20

解決它: 我設置patrocinioDidLoad在logoAnimation直接,不使用標準的getter和setter。在logoAnimation,

patrocinioDidLoad = YES; 

沒有工作,而

self.patrocinioDidLoad = YES; 

做到了!

+0

謝謝你解決了我的問題 對我來說,像logoAnimation = [[MainLogoAnimation alloc] init];沒有工作,但self.logoAnimation = [[MainLogoAnimation alloc] init] autorelease];作品。 – ssj 2011-04-21 03:58:19

+0

所以如果你想使用@synthesize製作的setters和getters,你總是必須把「self」放在前面? – gonzobrains 2011-07-12 02:28:34

+0

哇!經過幾個小時的測試,我的代碼發現爲什麼沒有調用obserValueForKeyPath,我終於發現這是爲什麼。爲什麼蘋果公司在文檔中大膽表明,必須通過二傳手(並因此使用該財產而不是伊娃)來使其運行? – ArtOfWarfare 2012-04-27 03:09:28