核心数据changedValues是否忽略二进制数据和转换属性?

时间:2014-02-28 21:01:03

标签: ios core-data entity

我在保存上下文之前通过changedValues评估核心数据实体,以便我可以对托管对象进行一些其他更改。就我而言,我有一些非平凡的计算只有在对象真正改变时才有意义。

我将我的一个属性更改为二进制数据,并添加了一个转换器来存储字典数据。 changedValues方法始终返回nil字典或没有此属性的字典。

文档中的ChangedValues:

  

返回值   一个字典,包含自上次提取或保存接收器以来已更改的持久属性的名称作为键,以及值作为属性的新值。

     

讨论   此方法仅报告对定义为接收方持久属性的属性的更改,而不是对瞬态属性或自定义实例变量的更改。这种方法不会不必要地引发关系错误。

changedValues是否不返回已转换属性的值?我已经看到,当我存储像图像这样的东西时,changedValues会返回字典中的二进制数据属性名称。

我在文档中没有找到有关字典中返回的有效实体属性的信息。

确定托管对象是否已被修改的最佳做法是什么?

谢谢!

更新 这是我用来将字典存储为二进制对象的转换器:

@implementation DictionaryToData
+ (BOOL)allowsReverseTransformation
{
    return YES;
}

+ (Class)transformedValueClass {
    return [NSDictionary class];
}

- (id)transformedValue:(id)value {
    return [NSKeyedArchiver archivedDataWithRootObject:value];
}

- (id)reverseTransformedValue:(id)value {
    return [NSKeyedUnarchiver unarchiveObjectWithData:value];
}

@end

2 个答案:

答案 0 :(得分:0)

NSDictionary确实不能包含二进制文件。您必须单独获取二进制文件(不在字典中)并手动转换它。

答案 1 :(得分:0)

在实施访问者时,您需要围绕原始访问权限调用willAccessValueForKey:didAccessValueForKey:

同样,在实施您的setter时,您需要在原始设置器周围调用willChangeValueForKey:didChangeValueForKey: