核心数据不更新可转换属性

时间:2010-11-03 16:39:41

标签: iphone core-data ios

我正在使用具有“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值转换器重新编码。但是编码器永远不会被调用,并且更新的数据不会被保存。

如果不是将原始数据重新设置回托管对象,而是创建修改后数据的副本并将 设置到托管对象上,然后识别更改。核心数据是否可能使用缓存版本的数据?或者还有别的我在这里做错了吗?感谢...

2 个答案:

答案 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