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

尝试将 CMTime 存储为 Core Data 上的可转换属性

从一个复制并转换为 Core Data 中的另一个属性

Core Data 不会将属性更新保留到数据库