Core Data (Initiating the Migrat

2017-03-27  本文已影响0人  Natus_Vincere

启动迁移流程

本章介绍如何启动迁移过程以及默认的迁移过程的工作原理。它没有描述自定义迁移过程。

当你初始化一个持久性储存协调器时,你可以为其分配托管对象模型;协调器使用该模型来打开持久储存。使用addPersistentStoreWithType:configuration:URL:options:error:打开持久储存。但是,如何使用此方法取决与应用程序是使用模型版本控制器还是选择支持的迁移方式,无论你选择使用默认迁移过程还是自定版本偏移检测和迁移引导指令。以下列表描述了不同的场景以及应该在每个场景中执行的操作:

你可以简单的使用addPersistentStoreWithType:configuration:URL:options:error:检查是否需要迁移,但这是一个重量级的操作,对于此目的来说效率不高。

重要的是要认识到两个正交概念:

  1. 你可以在迁移期间执行自定义代码。
  2. 你可以拥有版偏移检测和迁移引导的自定义代码。

迁移策略类允许你以多种方式自定义实体和属性的迁移,这些通常是你需要的。但是,你可能会使用自定义偏移检测和迁移引导(自举),以便你可以控制迁移过程。例如,如果您有非常大的储存,则可以使用两个数据模型设置迁移管理器,然后使用一系列映射模型将数据迁移到目标储存中(如果对每个调用使用相同的目标URL,Core Data将对新对象添加到现有储存中)。这允许框架(和你)在转换过程中限制内存中的数据量。

默认迁移流程

要打开储存并执行迁移(如果有必要):请使用addPersistentStoreWithType:configuration:URL:options:error:方法,并且将选项添加到密匙为NSMigratePersistentStoresAutomaticasllyOption的条目中,该值为表示“YES”的NSNumber对象。你的代码与下示类似:
Listing 6-1 Opening a store using automatic migration

NSError *error;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSURL *storeURL = <#The URL of a persistent store#>;
NSDictionary *optionsDictionary =
    [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
                    forKey:NSMigratePersistentStoresAutomaticallyOption];
 
NSPersistentStore *store = [psc addPersistentStoreWithType:<#Store type#>
                                configuration:<#Configuration or nil#>
                                URL:storeURL
                                options:optionsDictionary
                                error:&error];

如果迁移成功,则在您的任何文件拓展名和已迁移的储存保存到storeURL之前,storeURL上的现有储存将已“~”后缀重新命名。

在执行addPersistentStoreWithType:configuration:URL:options:error:时,Core Data执行以下操作:

  1. 尝试查找可用于打开储存的托管对象模型
    Core Data依次搜索应用程序的资源模型以进行测试。如果找不到合适的模型,Core Data将返回一个nil和一个合适的错误(error)。
  2. 尝试找到从现有储存的托管对象模型映射到永久储存协调器正在使用的映射模型。
    Core Data通过应用程序的资源搜索可用的映射模型并一次进行测试。如果找不到合适的映射,则Core Data将返回NO和一个合适的错误(error)。
    请注意:必须创建一个合适的映射模型才能使此阶段成功。
  3. 创建映射模型所需的迁移策略对象的实例。

注:即使你使用默认迁移过程,也可以使用自定义迁移策略类自定迁移。

上一篇下一篇

猜你喜欢

热点阅读