我是核心数据的新手,目前我正在使用核心数据维护应用程序。
需要很快发布该应用程序的新版本,我必须将实体添加到数据模型中。
我遵循了本教程轻量级教程,该教程非常有用,但我也阅读了所有Apple文档,但此惊人的文章核心数据迁移以了解Globaly的工作原理。
尽管我只需要在数据模型中添加一个实体,但我听说在这种情况下轻量级迁移是可以的。
我只需要链接到已经存在的父型实体的1个新实体(无属性)。
到目前为止我所做的事情:
- 该应用程序当前位于Datamodel的版本3上
- 我已经从版本3创建了一个新的数据模型(版本4)
- 我选择了数据模型4作为当前数据模型
- 我创建了我的新实体(whithout属性),并将其链接到父实体。
- 我创建了生成的类对象
- 然后我修改了我的UI
构建并运行,它有效,很酷。但是,当我从AppStore下载当前版本时,当我从TestFlight安装新的最近制作的存档/IPA时(安装旧版本 ->迁移方案)应用程序运行,没有我的新实体/DataModel。
在Apple文档中,很明显,添加实体由核心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的更新相同。
要设置一个用于轻量级迁移的应用程序,您需要将以下行插入到核心框架中,其中声明了持久存储。这些设置可以启用支持轻质迁移的选项(这些选项来自Swift 3.0应用程序,因此,如果您在2.3中,它们可能会有所不同):
NSMigratePersistentStoresAutomaticallyOption as NSObject: true
NSInferMappingModelAutomaticallyOption as NSObject: true
一旦到位,Coredata就会在需要时正确执行轻量级迁移,包括添加新实体,属性和关系,这样您就可以了,只要您不做任何需要更多动作的事情您的部分 - 喜欢更改实体或属性的名称。