2010-04-28 110 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