Bra*_*ter 5 core-data key-value-observing ios
我正在使用Core Data来建模具有属性和关系的实体.我想使其中一个属性依赖于其他两个关系.
核心数据常见问题解答和其他几个示例+(NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key用于此目的.但是,这似乎仅针对我的所有关系属性调用,而不是针对任何属性调用.另外,keyPathsForValuesAffecting<key>永远不会被我的任何属性调用.
这是正常行为还是我错过了什么?如何根据其他属性或属性计算一个属性,例如.距离,通过设置startLocation和stopLocation?
几天之后看起来像是找到了我自己问题的解决方案,事实证明我错过了一些东西.
重读方法的讨论后keysPathsForValuesAffectingValueForKey:在NSKeyValueObserving协议参考,我意识到下面这句话的含义:
当密钥的观察者向接收类的实例注册时,键值观察本身会自动观察同一实例的所有密钥路径,并在任何这些密钥的值发送时将密钥的更改通知发送给观察者.关键路径变化.
简而言之,您的实例应该让观察者观察您的属性的更改<key>:
[myInstance addObserver:myObserver forKeyPath:attributeKey options:nil context:nil];
Run Code Online (Sandbox Code Playgroud)
只要您注册了观察者,协议就会调用keysPathsForValuesAffectingValueForKey您的特定属性键.如果此方法返回非空键集路径,则KVO将为您的属性发出更改通知(如果对这些键路径中的任何一个进行了更改),此外还会通知您对属性的任何直接更改.
关系键会自动调用,因为Core Data已经使用观察者来保持反向关系的最新状态.
在您希望某个属性依赖于同一实体中的另一个属性或关系的特定情况下,您必须:
addObserver:forKeyPath:options:context:keyPathsForValuesAffectingValueForKey:或keyPathsForValuesAffecting<key>observeValueForKeyPath:ofObject:change:context您的属性键路径以对相关更改通知执行操作,即更新属性值.| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |