我是Core Data的新手,我目前正在使用Core Data维护一个应用程序。
由于需要尽快发布应用程序的新版本,我必须将en Entity添加到数据模型中。
我已经按照本教程Lightweight tutorial这非常有用,但我也阅读了所有的Apple文档,还阅读了这篇精彩的文章Core Data Migration,以便了解它的工作原理。
虽然我只需要在数据模型中添加一个实体,但我听说在这种情况下轻量级迁移是可以的。
我只需要链接到已存在的父实体的1个新实体(没有属性)。
到目前为止我做了什么:
构建并运行,它很有效。但是当我从AppStore下载当前版本时,当我从TestFlight安装新的最新版本的Archive / IPA时,(安装旧版本 - >迁移场景)应用程序在没有我的新实体/数据模型的情况下运行。
从Apple文档中可以清楚地看到,Core Dara支持轻量级迁移添加实体。
我知道这不是一个简单的过程,但我觉得我完全遵循了一切。
如何在没有每次存档的情况下测试迁移,在TestFlight等上发布...
如果您需要任何其他信息以便清楚地了解我的问题和/或撰写更详细的答案,请随时在评论中提问,我将编辑我的问题。
提前谢谢。
编辑:
以下是来自AppDelegate的NSPersistentStoreCoordinator的代码。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
// Create the coordinator and store
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSURL *storeURL = [self persistentStoreURL];
NSError *error = nil;
NSString *failureReason = @"There was an error creating or loading the application's saved data.";
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error]) {
// Report any error we got.
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data";
dict[NSLocalizedFailureReasonErrorKey] = failureReason;
dict[NSUnderlyingErrorKey] = error;
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
DDLogError(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
我不知道如何通过测试或日志有效地了解CoreData使用新数据模型(版本4)并成功执行了迁移。
我知道当我从xCode构建时它起作用,但它与AppStore的更新情况不同。
答案 0 :(得分:2)
要为轻量级迁移设置应用程序,您需要将以下行插入到声明持久性存储的CoreData框架中。这些设置启用了支持轻量级迁移的选项(这些选项来自Swift 3.0应用程序,因此如果您使用的是2.3,它们可能会有所不同):
NSMigratePersistentStoresAutomaticallyOption as NSObject: true
NSInferMappingModelAutomaticallyOption as NSObject: true
一旦这些行到位,CoreData将在需要时正确执行轻量级迁移,包括添加新实体,属性和关系,这样只要您不执行需要执行更多操作的任何操作,就应该没问题。你的部分 - 比如改变实体或财产的名称。