【问题标题】:observeValueForKeyPath not being called未调用 observeValueForKeyPath
【发布时间】:2011-02-13 07:01:02
【问题描述】:

我有一个 ViewController 创建一个 UIView 的实例,然后我向该实例注册了一个观察者,这样

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 永远不会被调用...

我错过了什么吗?

感谢您的帮助!

安东尼奥

【问题讨论】:

    标签: iphone key-value-observing


    【解决方案1】:

    解决了: 我直接在 logoAnimation 中设置了 patrocinioDidLoad,没有使用标准的 getter 和 setter。在 logoAnimation 中,

    patrocinioDidLoad = YES;
    

    没用,而

    self.patrocinioDidLoad = YES;
    

    做了!

    【讨论】:

    • 谢谢你解决了我的问题对我来说,像 logoAnimation = [[MainLogoAnimation alloc] init];没用,但 self.logoAnimation = [[MainLogoAnimation alloc] init]autorelease];工作。
    • 所以如果你想使用@synthesize制作的setter和getter,你总是必须把“self”放在前面?
    • 哇!经过数小时的代码测试以找出为什么 obserValueForKeyPath 从未被调用,我终于发现这就是原因。为什么 Apple 不在文档中加粗它必须通过 setter(因此使用属性而不是 ivar)才能工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多