2010-11-03 46 views
3

我正在使用具有类型为“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

看来你需要重写类在NSManagedObject实体子类初始化方法也可用于变压器工作(已知核心数据错误)。 下面的代码是从苹果的位置代码示例,它是测试和工程: 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"]; 
    } 
}