Core Data 未更新可转换属性
Posted
技术标签:
【中文标题】Core Data 未更新可转换属性【英文标题】:Core Data not updating a transformable attribute 【发布时间】:2010-11-03 16:39:41 【问题描述】:我正在使用具有“可转换”类型属性的 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 值转换器重新编码。但是编码器永远不会被调用,更新的数据也不会被保存。
如果不是将原始数据重新设置回托管对象,而是创建修改后数据的副本并将 that 设置到托管对象上,则可以识别更改。核心数据是否可能正在使用数据的缓存版本?还是我在这里做错了什么?谢谢...
【问题讨论】:
【参考方案1】:似乎您需要在您的 NSManagedObject 实体子类中覆盖 Class initialize 方法,以便转换器工作(已知的核心数据错误)。 以下代码来自 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"];
【讨论】:
【参考方案2】:我刚刚遇到了同样的问题,显然它似乎是一个已知的错误:
http://lists.apple.com/archives/Cocoa-dev/2009/Dec/msg00979.html
【讨论】:
以上是关于Core Data 未更新可转换属性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Swift 的 Core Data 获取非标准(可转换)属性来更新/保存和持久化?
从 Core Data 非标量属性更新 SwiftUI 视图
如何在 Swift 中将可转换属性保存到 Core Data