Core data 是否可以指定启动应用程序时使用的核心数据模型版本号

Core data 是否可以指定启动应用程序时使用的核心数据模型版本号,core-data,versioning,Core Data,Versioning,我试图避免在iCloud中共享核心数据存储时使用轻量级迁移升级核心数据存储,因此我希望将该存储迁移到仅本地存储,然后使用自动轻量级迁移执行升级。当商店在iCloud中时这样做并不总是在OSX上工作,而且在iOS上似乎很脆弱,需要很长时间,很多商店都会从应用程序下调出,等等 以下是我试图解决的问题: -启动时检测应用程序何时需要将其核心数据存储升级到新型号版本 -如果需要升级且存储在iCloud中共享,则将存储迁移到本地存储,而无需核心数据自动执行轻量级迁移(升级) -然后打开存储并在存储为本地时

我试图避免在iCloud中共享核心数据存储时使用轻量级迁移升级核心数据存储,因此我希望将该存储迁移到仅本地存储,然后使用自动轻量级迁移执行升级。当商店在iCloud中时这样做并不总是在OSX上工作,而且在iOS上似乎很脆弱,需要很长时间,很多商店都会从应用程序下调出,等等

以下是我试图解决的问题: -启动时检测应用程序何时需要将其核心数据存储升级到新型号版本 -如果需要升级且存储在iCloud中共享,则将存储迁移到本地存储,而无需核心数据自动执行轻量级迁移(升级) -然后打开存储并在存储为本地时执行升级

因此,我目前有效的解决方案是: -在应用程序捆绑包中创建两个核心数据模型捆绑包,两个捆绑包都相同,但一个捆绑包使用模型的最新版本,另一个捆绑包使用早期版本。例如,调用“App\u model”和“App\u model\u old”。 -使用[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:]API检查使用“App_model”的兼容性以及使用旧版本模型的存储应返回否。 -现在,在将存储添加到storeCoordinator时,使用migratePersistentStore API并使用旧版本的模型“App_model_old”将存储迁移到本地存储,以确保不会发生轻量级迁移。 -然后使用新的模型包“App_model”打开应用商店,以便核心数据执行轻量级迁移 -然后最终将存储迁移回ICloud


使用两个核心数据包似乎可以很好地工作,但要继续克隆模型包只是额外的麻烦(请不要太在意)。尽管如此,我想知道是否有人知道是否可以通过编程指定在核心数据模型捆绑包中使用哪个模型版本,以避免创建两个捆绑包,或者交替地防止轻量级迁移的发生,但仍然允许使用migratePersistentStore API来移动存储。

Oops-我认为我刚刚在苹果文档中找到了答案


为什么不将NSMigratePersistentStoresAutomaticallyOption的“否”通过?这不会禁用轻量级迁移吗

NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption: @NO };

当然,但是你根本无法打开它来迁移它,是吗?不确定,但这应该很容易测试,创建一个版本化模型,并确保它可以从两个版本中打开存储。FWIW文档中没有任何关于版本模型中包含两个版本时无法读取的内容。
NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption: @NO };