【问题标题】:KVO on coreData objectcoreData 对象上的 KVO
【发布时间】:2014-04-15 07:41:20
【问题描述】:

我不知道如何简单地观察一个对象属性的变化,这没有按预期工作。

这是我的代码:

- (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 文档说 KVO on dot 语法是自动完成的。我的 value 属性是在 MyObject 上合成的,但没有按预期工作。请注意,Myobject 是一个 coreData 对象。但我不明白为什么它会改变一些东西,因为我已经合成了这个方法。感谢您的帮助。

* 编辑

正如 Quellish 所说,我的财产被定义为

@property (nonatomic) int32_t value;

那是行不通的。

正确的做法是

@property (nonatomic) NSNumber* value;

【问题讨论】:

  • 您能否用有关如何定义属性“值”以及您是否实现了自己的访问器的信息来更新您的问题?你不应该在使用属性时调用 will/didChangeValueForKey,只有在直接访问 ivar 时(你不应该这样做)。

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


【解决方案1】:

这一行:

theObject.value = 5;

将不起作用,因为您正在设置一个用整数表示 NSNumber 的属性。试试这个,看看它是否能解决你的问题:

theObject.value = [NSNumber numberWithInteger:5];

您似乎在如何实施 KVO 方面还有一些其他问题,但看起来上面的内容可以解决您在这个问题中描述的问题。

【讨论】:

  • 另外,@5 或 @([self calculated5]) ... 我个人讨厌 NSNumber 初始化器的冗长,因为 @ 可以对象化很多东西,包括原始数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2014-02-05
  • 1970-01-01
  • 2015-07-10
  • 2011-02-07
  • 2011-06-06
相关资源
最近更新 更多