ios - 是否可以保存 NSManagedObjectModel?

标签 ios sqlite core-data

我有以下要求:使用 .xml 文件中的数据创建并填充 SQLite 数据库,该文件可以随时具有不同的结构,因此我无法使用 Xcode 创建 NSManagedObjectModel,它必须在运行时。我已经以编程方式成功创建了一个 NSManagedObjectModel,创建了持久存储并使用 .xml 中的数据填充了 sqlite 文件。但是,下次我使用该应用程序时,持久存储与 NSManagedObjectModel 不兼容(我不想每次运行该应用程序时都重新创建模型,只是第一次)。有没有办法保存我以编程方式创建的模型并在下次需要时加载它?我在示例中只能看到从 NSBundle 加载的模型。

最佳答案

Is there any way to save the model I created programmatically and load it the next time it is needed?

是的。 NSManagedObjectModel 符合NSCoding,这意味着您可以轻松地将其转换为/自NSData,并保存和读取NSData 很简单。

保存模型:

NSString *modelPath = // path where you want to save
NSData *modelData = [NSKeyedArchiver archivedDataWithRootObject:self.managedObjectModel];
[modelData writeToFile:modelPath atomically:YES];

读取保存的模型:

if ([[NSFileManager defaultManager] fileExistsAtPath:modelPath]) {
    NSData *savedModelData = [NSData dataWithContentsOfFile:modelPath];
    NSManagedObjectModel *savedModel = [NSKeyedUnarchiver unarchiveObjectWithData:savedModelData];
}

关于ios - 是否可以保存 NSManagedObjectModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649162/

相关文章:

ios - uielementinput 未显示在 gpuimage 中

c - 内存数据文件中的SQLite3

iphone - Objective-C:与 CoreData 的多对多关系

ios - 如何更改核心数据数据库 : baby steps?

swift - 如何从核心数据swift 3中删除项目

iOS 7.0 和 ARC : UITableView never deallocated after rows animation

ios - 实现动态内容的透明模糊导航栏

objective-c - 静态/堆栈和堆内存之间的主要速度差异

ios - 在 iOS 8 扩展中访问 Core Data SQL 数据库(在 App 和 Widget 扩展之间共享数据)

android - 试图重新打开一个已经关闭的对象 : SQLiteDatabase: