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

don*_*ile 4 iphone core-data

这篇文档非常令人困惑:

您为NSManagedObject的子类编写的访问器方法的实现通常与您为其他类编写的访问器方法的实现不同.

如果不提供自定义实例变量,则使用基本访问器方法从内部存储中检索属性值并将值保存到内部存储中.你必须确保你引用有关访问和更改的通知方法(willAccessValueForKey :, didAccessValueForKey :, willChangeValueForKey :, didChangeValueForKey :, willChangeValueForKey:withSetMutation:usingObjects:和didChangeValueForKey:withSetMutation:usingObjects :).NSManagedObject禁用自动键 - 值观察(KVO,请参阅键 - 值观察编程指南)更改通知,以及原始的访问方法不调用访问和更改通知方法.

在实体模型中未定义的属性的访问器方法中,您可以启用自动更改通知或调用相应的更改通知方法.

有没有显示这些样子的例子?

Tec*_*Zen 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"];
}
Run Code Online (Sandbox Code Playgroud)

这里的基本思想是你必须使用willChange...didChange...调用任何原始值更改,以便上下文知道某些内容正在被更改.

除非您有设置属性的副作用,否则通常不必调整自己的访问器.

  • Xcode 5中是否删除了"剪贴板的复制方法实现"?我找不到它. (3认同)