我正在使用具有“transformable”类型属性的Core Data NSManagedObject(在iOS应用中)来存储一大块数据。使用内置的NSKeyedUnarchiveFromData值转换器对数据进行编码/解码。问题是我在二进制数据发生变化后无法正常更新NSManagedObject。比方说,代码如下:
id temp = [myManagedObject myTransformableAttribute];
//.. do something with temp
[myManagedObject setMyTransformableAttribute:temp];
NSError *error;
if(![[myManagedObject managedObjectContext] save:&error]) {
//present error
}
在我看来,将可转换属性“重新设置”到托管对象上,然后保存托管对象,应该会导致数据通过NSKeyedUnarchiveFromData值转换器重新编码。但是编码器永远不会被调用,并且更新的数据不会被保存。
如果不是将原始数据重新设置回托管对象,而是创建修改后数据的副本并将 设置到托管对象上,然后识别更改。核心数据是否可能使用缓存版本的数据?或者还有别的我在这里做错了吗?感谢...
答案 0 :(得分:2)
似乎你需要覆盖NSManagedObject实体子类中的Class initialize方法,以便变换器工作(已知的Core Data bug)。 以下代码来自Apple的位置代码示例,它经过测试和工作: http://developer.apple.com/library/ios/#samplecode/Locations/Introduction/Intro.html
+ (void)initialize {
if (self == [Event class]) {
UIImageToDataTransformer *transformer = [[UIImageToDataTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"UIImageToDataTransformer"];
}
}
答案 1 :(得分:0)
我刚遇到同样的问题,显然它似乎是一个已知的错误:
http://lists.apple.com/archives/Cocoa-dev/2009/Dec/msg00979.html