gpt4 book ai didi

cocoa - 如何将 NSKeyedUnarchive NSManagedObject 的子类导入到 Core Data 中?

转载 作者:行者123 更新时间:2023-12-03 17:26:02 24 4
gpt4 key购买 nike

使用 NSKeyedArchiver/NSKeyedUnarchiver 保存和加载数据的现有基于文档的应用程序当前已转换为使用 Core Data 作为其存储后端。

现在我正在尝试导入使用以前的应用程序保存的文件。对象结构没有改变,但我将所有对象更改为 NSManagedObject 。现在,initWithCoder: 调用 [super initWithCoder:] 并且不会使用 NSEntityDescription 创建对象。这彻底失败了(正如预期的那样)。

我的问题是:拥有这样的导入功能的最佳实践/好建议是什么?

最佳答案

正确的方法是实现 NSAtomicStore 的子类,将旧数据格式解档为核心数据表示形式。使用该存储加载旧数据后,您可以使用 -[NSPersistentStoreCoordinator migratePersistentStore:toURL:options:withType:NSSQLiteStoreType error:] 轻松迁移数据

旧(错误)答案:

在摆弄了我自己的解决方案(涉及一些在 table 上敲击头)之后,我发现了与心理学院描述的相同的解决方案:

KEYED-ARCHIVING TO CORE DATA MIGRATION

我的做法与他们相同,但我创建了自己的 NSKeyedValueDecoder 子类来存储上下文。所有实体的 CBManagedObject 父类(super class)的 initWithCoder: 如下所示:

- (id) initWithCoder:(NSCoder *)inCoder {
NSManagedObjectContext *context = ((CBNSKeyedUnarchiverCoreData*)inCoder).context;
self = [super initWithEntity:[NSEntityDescription entityForName:[[self class] entityName]
inManagedObjectContext:context] insertIntoManagedObjectContext:context];
if (!self) return nil;
return self;
}

每个实体通过类方法+entityName给出其实体名称。

看起来是一个很好的解决方案,因为它现在效果很好。

关于cocoa - 如何将 NSKeyedUnarchive NSManagedObject 的子类导入到 Core Data 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com