我是iOS开发的新手。我尝试在我的应用中更新现有的核心数据模型。我想在核心数据模型中添加一个新实体,但是当我在核心数据模型中更改任何内容时,应用程序崩溃了。我不明白这些实体是如何与我现有的sqlite数据库表和列链接的。即使我更改了实体或属性的名称,应用程序崩溃并给我这个错误 - '用于打开商店的模型与用于创建商店的模型不兼容。
我总是在核心数据库发生任何变化之后在模拟器中重新安装应用程序但无法正常工作。任何人都可以建议我如何将核心数据与sqlite表和列链接以及如何通过添加更多实体和属性来迁移我的核心数据模型它。
感谢您的任何建议!
答案 0 :(得分:0)
Apple没有记录核心数据实体在sqlite中的持久性。除非您确切知道自己在做什么,否则请勿触摸sqlite级别的数据。
如果您需要将模型更改为xcode中的模型。
特别是:如果您在商店中拥有应用程序的早期版本或通过其他渠道分发,那么请考虑迁移策略。核心数据非常支持这一点。为此,您将保留模型原始版本的副本,并使用xcode创建该模型的新版本。如果更改只是关于其他实体或其他字段,那么自动迁移应该这样做。
答案 1 :(得分:0)
如果您仍在开发过程中,可以从模拟器中卸载应用程序(如在iDevice上:长按应用程序图标,然后按X)
您已经发布了应用:按照@wain的建议,检查核心数据迁移的优秀教程
答案 2 :(得分:0)
这是一次迁移。
您需要创建新版本的Core Data Model(这在Xcode中完成),然后将新模型设置为当前版本。从那里,您将实体添加到您的新版本。此外,您需要在Core Data中启用“自动”迁移,以便Core Data将现有数据从先前版本迁移到新版本。
您可以通过更改NSPersistentStoreCoordinator
初始化代码并添加选项来执行此操作:
NSMutableDictionary *options = [NSMutableDictionary dictionary];
options[NSMigratePersistentStoresAutomaticallyOption] = @YES;
options[NSInferMappingModelAutomaticallyOption] = @YES;
options[NSSQLitePragmasOption] = @{ @"journal_mode":@"DELETE" };
NSError *error = nil;
NSPersistentStore *store = [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]);
if (store == nil) {
NSLog(@"Error initializing PSC: %@\n%@", [error localizedDescription], [error userInfo]);
}
如果您的商店无法自动迁移(不太可能),那么您将需要执行繁重或手动迁移。您可以在StackOverflow上搜索有关该主题的各种讨论。