我在保存上下文之前通过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
答案 0 :(得分:0)
NSDictionary确实不能包含二进制文件。您必须单独获取二进制文件(不在字典中)并手动转换它。
答案 1 :(得分:0)
在实施访问者时,您需要围绕原始访问权限调用willAccessValueForKey:
和didAccessValueForKey:
。
同样,在实施您的setter时,您需要在原始设置器周围调用willChangeValueForKey:
和didChangeValueForKey:
。