我有以下要求:用来自SQLite文件的数据创建和填充.xml数据库,这个文件可以有不同的结构,所以我不能用Xcode创建NSManagedObjectModel,它必须在运行时。我已经成功地以编程方式创建了一个NSManagedObjectModel,创建了持久存储,并使用来自.xml的数据填充了sqlite文件。然而,下次我使用该应用程序时,持久性存储与NSManagedObjectModel不兼容(我不想每次运行该应用程序时都重新创建该模型,这只是第一次)。是否有任何方法来保存我以编程方式创建的模型,并在下次需要时加载它?我在示例中看到的只是从NSBundle加载的模型。
发布于 2014-03-26 01:24:50
是否有任何方法来保存我以编程方式创建的模型,并在下次需要时加载它?
是。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];
}发布于 2014-03-26 01:15:42
我不确定您是否在说xml文件中的数据每次都在更改。听起来你指的是数据,而不是数据模型。我不能具体回答,但我会采取如下方法。
如果每次xml文件中的数据结构相同或接近相同,我将创建一个数据模型来匹配它。
然后,我将编写某种解析器类,根据"ManagedObjectModel“或数据模型读取xml并将其解析到核心数据存储中。
当您更改Core数据之外的数据存储时,我已经看到了您正在讨论的错误。您需要让核心数据处理对数据存储的所有读写,否则核心数据将基本告诉您“您的持久存储是由ManagedObjectModel以外的其他东西创建或更改的”。我认为这就是正在发生的事情。
我知道我并没有像Core Data所描述的那样使用这个术语,但是Core数据令人困惑,我试图传达信息和理解。
我也会考虑使用MagicalRecord。它极大地简化了核心数据的使用,并且有一个关于www.raywenderlich.com的很好的教程,您可以找到这里
我真的希望这能帮你解决问题。如果没有,请发布一些示例代码,或者您所引用的xml示例。
祝好运
https://stackoverflow.com/questions/22649162
复制相似问题