首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以指定在启动应用程序时使用的核心数据模型版本号

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

Stack Overflow用户
提问于 2014-03-02 04:49:52
回答 2查看 170关注 0票数 0

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

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

因此,我目前有效的解决方案是执行以下操作:-在应用程序包中创建两个核心数据模型包,两者相同,但一个设置为使用模型的最新版本,另一个设置为使用较早版本。例如,调用了'App_model‘和'App_model_old’。-使用API isConfiguration:compatibleWithStoreMetadata: NSManagedObjectModel使用'App_model‘检查兼容性,使用旧版本的模型的商店应该返回NO。-现在使用migratePersistentStore应用程序接口将存储区迁移到本地存储区,并在将存储区添加到storeCoordinator时使用旧版本的模型'App_model_old‘,以确保不会发生轻量级迁移。-然后使用新的模型包'App_model‘打开存储,以便核心数据执行轻量级迁移-最后将存储迁移回ICloud。

使用两个核心数据包似乎可以很好地工作,但必须不断克隆模型包只是一个额外的麻烦(请注意,不是很多)。然而,我想知道是否有人知道是否有可能以编程方式指定在核心数据模型包中使用哪个模型版本,以避免创建两个包,或者防止发生轻量级迁移,但仍然允许使用migratePersistentStore应用程序接口来移动存储。

EN

回答 2

Stack Overflow用户

发布于 2014-03-02 04:54:20

哦-我想我刚刚在https://developer.apple.com/library/mac/documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmCustomizing.html#//apple_ref/doc/uid/TP40004399-CH8-SW1的苹果文档中找到了答案

代码语言:javascript
运行
复制
NSDictionary *sourceMetadata =
    [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:sourceStoreType
                                  URL:sourceStoreURL
                                  error:&error];
NSManagedObjectModel *sourceModel =
    [NSManagedObjectModel mergedModelFromBundles:nil
                            forStoreMetadata:sourceMetadata];
票数 0
EN

Stack Overflow用户

发布于 2014-03-02 13:42:49

为什么不直接对NSMigratePersistentStoresAutomaticallyOption说no呢?这不会禁用轻量级迁移吗?

代码语言:javascript
运行
复制
NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption: @NO };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22120184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档