我在商店有一个应用程序,它指向文档目录中的appname.sqlite文件。这是旧代码:
NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"MyApp.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption : @YES,NSInferMappingModelAutomaticallyOption : @YES}; error:&error]) {
abort();
}
我现在想要更新。新功能是预装的.sqlite数据库,该数据库位于包中。请参阅以下内容
NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"MyNewPrefilled" ofType:@"sqlite"]];
在全新安装应用程序时可以正常工作。但是对于已经登录并且在db(app目录中的旧sqlite)中保存了大量数据的用户会发生什么?我会失去它,因为我现在指向应用程序包(MyNewPrefilled.sqlite)中的.sqlite而不是app目录。如何将旧数据从doc目录的旧sqlite文件恢复到捆绑包中的新数据?
仅供参考:我已经使用代码数据迁移(涉及数据模型中的版本号),当我在更新中更改数据模型时,该工作正常。
答案 0 :(得分:0)
Apple建议使用两个持久存储(在同一模型中)来分隔用户生成的数据和静态数据。据推测,如果您的数据是静态的,那么您应该这样做,并为静态数据设置只读存储。请参阅“核心数据编程指南”中的示例Configurations。
另一种方法是