我无法弄清楚如何简单地观察一个对象属性的变化,这是不能按预期工作的。
这是我的代码:
- (void)observeBasketValueChane:(MyObject*)theObject{
[theObject addObserver: self
forKeyPath: @"value"
options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context: NULL];
// not working
theObject.value = 5;
// will work
[theObject willChangeValueForKey:@"value"];
[theObject setValue: [NSNumber numberWithInt: 3] forKey:@"value"];
[theObject didChangeValueForKey:@"value"];
}
Apple doc说KVO on dot语法是自动完成的。我的值属性是在MyObject上合成的,但是没有按预期工作。请注意,Myobject是coreData对象。但是我不明白为什么它会改变一些东西,因为我已经合成了这个方法。谢谢你的帮助。
* 编辑
Quellish说,我的财产被定义为
@property (nonatomic) int32_t value;
这不会奏效。
正确的方法是
@property (nonatomic) NSNumber* value;
答案 0 :(得分:3)
这一行:
theObject.value = 5;
无效,因为您正在设置一个表示带整数的NSNumber的属性。请尝试相反,看看它是否解决了您的问题:
theObject.value = [NSNumber numberWithInteger:5];
您似乎在如何实施KVO方面存在其他一些问题,但看起来上述内容将解决您在此问题中描述的问题。