我正在使用具有“可转换”类型属性的核心数据 NSManagedObject(在 iOS 应用程序中)来存储数据 block 。使用内置的 NSKeyedUnarchiveFromData 值转换器对数据进行编码/解码。问题是我在二进制数据更改后无法正确更新 NSManagedObject。例如,代码如下所示:
id temp = [myManagedObject myTransformableAttribute];
//.. do something with temp
[myManagedObject setMyTransformableAttribute:temp];
NSError *error;
if(![[myManagedObject managedObjectContext] save:&error]) {
//present error
}
在我看来,将可转换属性“重新设置”到托管对象上,然后保存托管对象,应该会导致数据通过 NSKeyedUnarchiveFromData 值转换器重新编码。但编码器永远不会被调用,更新的数据也不会被保存。
如果我不是将原始数据重新设置回托管对象,而是创建修改数据的副本并将该设置到托管对象上,则可以识别更改。核心数据是否有可能使用数据的缓存版本?或者我在这里做错了什么?谢谢...
最佳答案
似乎您需要重写 NSManagedObject 实体子类中的类初始化方法才能使转换器正常工作(已知的核心数据错误)。 以下代码来自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"];
}
}
关于iphone - 核心数据不更新可转换属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089352/