Core Data中的自定义访问器方法实现如何?

时间:2010-06-11 12:20:56

标签: iphone core-data

这篇文章非常令人困惑:

  

存取方法的实现   你写的子类   NSManagedObject通常是不同的   从你为其他人写的那些   类。

     

如果您不提供自定义实例   变量,您检索属性   值的值和保存值   内部存储使用原始   存取方法。你必须确保这一点   你调用相关的访问权限   改变通知方法   (willAccessValueForKey :,   didAccessValueForKey :,   willChangeValueForKey :,   didChangeValueForKey :,   willChangeValueForKey:withSetMutation:usingObjects :,   和   didChangeValueForKey:withSetMutation:usingObjects :)。   NSManagedObject禁用自动   键值观察(KVO,见   键值观察编程指南)   更改通知,以及   原始访问器方法没有   调用访问和更改   通知方法。

     

在属性的访问器方法中   未在实体中定义的   model,你可以启用自动   更改通知或调用   适当的变更通知   方法

是否有任何示例显示它们的外观?

1 个答案:

答案 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...调用括起任何原始值变化,以便上下文知道某些东西正在被改变。

除非您有设置属性的副作用,否则通常不必操纵自己的访问者。