这篇文章非常令人困惑:
存取方法的实现 你写的子类 NSManagedObject通常是不同的 从你为其他人写的那些 类。
如果您不提供自定义实例 变量,您检索属性 值的值和保存值 内部存储使用原始 存取方法。你必须确保这一点 你调用相关的访问权限 改变通知方法 (willAccessValueForKey :, didAccessValueForKey :, willChangeValueForKey :, didChangeValueForKey :, willChangeValueForKey:withSetMutation:usingObjects :, 和 didChangeValueForKey:withSetMutation:usingObjects :)。 NSManagedObject禁用自动 键值观察(KVO,见 键值观察编程指南) 更改通知,以及 原始访问器方法没有 调用访问和更改 通知方法。
在属性的访问器方法中 未在实体中定义的 model,你可以启用自动 更改通知或调用 适当的变更通知 方法
是否有任何示例显示它们的外观?
答案 0 :(得分:11)
如果您进入数据模型编辑器,请选择和实体属性,然后选择“将方法实施复制到剪贴板”。它将为您生成访问器。以下是Core Data模板项目中默认“timeStamp”属性的访问器:
- (NSDate *)timeStamp
{
NSDate * tmpValue;
[self willAccessValueForKey:@"timeStamp"];
tmpValue = [self primitiveValueForKey:@"timeStamp"];
[self didAccessValueForKey:@"timeStamp"];
return tmpValue;
}
- (void)setTimeStamp:(NSDate *)value
{
[self willChangeValueForKey:@"timeStamp"];
[self setPrimitiveValue:value forKey:@"timeStamp"];
[self didChangeValueForKey:@"timeStamp"];
}
这里的基本思想是你必须用willChange...
和didChange...
调用括起任何原始值变化,以便上下文知道某些东西正在被改变。
除非您有设置属性的副作用,否则通常不必操纵自己的访问者。