核心数据对象上的KVO

时间:2014-04-15 07:41:21

标签: ios core-data key-value-observing

我无法弄清楚如何简单地观察一个对象属性的变化,这是不能按预期工作的。

这是我的代码:

- (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;

1 个答案:

答案 0 :(得分:3)

这一行:

theObject.value = 5;

无效,因为您正在设置一个表示带整数的NSNumber的属性。请尝试相反,看看它是否解决了您的问题:

theObject.value = [NSNumber numberWithInteger:5];

您似乎在如何实施KVO方面存在其他一些问题,但看起来上述内容将解决您在此问题中描述的问题。