核心数据自动迁移不起作用

Posted

技术标签:

【中文标题】核心数据自动迁移不起作用【英文标题】:Core data auto migration is not working 【发布时间】:2015-01-19 10:50:15 【问题描述】:

伙计们,

我需要一些关于核心数据迁移的帮助,这里是关于情况的描述。

    我有一个现有的 ios 应用,它使用核心数据提供离线支持。 应用商店当前版本为 1.1,应用商店当前核心数据模型版本为 11 (Model11.xcdatamodel)。 现在我正在向应用商店发布一个新版本(1.1.1),并且已经发生了重大工作。还有一个实体在核心数据中添加了一个新属性。 在对模型文件进行更改之前,我以 Model11.xcdatamodel 为基础添加了新的模型文件 (Model12.xcdatamodel)。 将 Model12.xcdatamodel 制作为当前版本。 在其中一个实体中添加了新属性以支持该功能,更改了模式等。 在此之后,我从 Xcode 实用程序窗口(右侧)创建了 Model11.xcdatamodel,其类型为“版本核心数据模型”。 从应用商店安装 1.1v,登录后,我在发布模式下创建了 1.1.1v 应用并安装。

但应用程序开始崩溃,并显示商店 URL 为空,这是来自设备的日志。

Jan 19 13:04:50 iPod MyApp[15856] <Error>: Magical Record Stack: Current Default Core Data Stack: ---- 
    Model:           
        BroadcastMessage = <6fa959c6 514f4c53 e53e7fd7 28585c56 6d4da4ad ba56c2c4 d92bef6e debadfd4>;
        Data = <92870bec c4a8794e 293dcbe9 93282d69 cb675039 cb9b9bf6 8dda6359 34697663>;
        Event = <de060947 8ec9f2bb 80e341eb 787e7eec 7cc2a09f 356e511c 7d515ca5 130690fe>;
        InvitedFriend = <1e041915 6931f26e fd325666 299adf13 5fa2a735 b16b5faf cc0c7de1 1792c97f>;
        MAnswer = <5c06b689 b0497f14 65e550d0 1bd30779 08056f42 a6361f71 4e0eb2e5 67127d66>;
        MQuestion = <96d6e2a6 b96f1371 2c52e719 ca6a0cbd 7957e63a 4a6ccbe8 049e8818 f9ec5d2d>;
        MUser = <af239067 1b3fb3d9 d63b6536 e0e411a8 6ff5f02e db5d7c01 968a4835 4f361610>;
        NotificationSettings = <75be9f25 cfb5f63e 9f717160 9b389386 8fb9d7e2 093648ac beff79dd b0c8181b>;
        RecentContact = <0eaf2696 94c73a4e 9155b3aa c98bf623 51165db6 c1a1472c 2178c3d0 654c0dac>;
    
    Coordinator:     <NSPersistentStoreCoordinator: 0x15e883a0>
    Store:           (null)
    Default Context: <NSManagedObjectContext (0x15e96c70): *** DEFAULT ***> on *** MAIN THREAD ***
    Context Chain:   

    - DEFAULT (0x15e96c70) (*)
    - BACKGROUND SAVING (ROOT) (0x15e99000) 
Jan 19 13:04:50 SB-iPod Medusa[15856] <Error>: Store2 URL after creation (null)

商店 URL 为 NULL。我不确定为什么会这样。

如果我在调试模式下运行,我会得到一个有效的 URL,并注意我正在使用 Magical Records 来获取核心数据。

我已关注此链接中提到的内容https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOM.html 但这不起作用

有人能告诉我为什么这次迁移会失败,我该如何解决这个问题?

【问题讨论】:

第 7 步应该是第 4 步。第 4 步是不必要的,因为您制作了两个无法迁移的不同模型。 我现在该如何解决这个问题? @thom_ek : 我该如何解决这个问题? 我没有注意到您正在使用 MagicalRecords(因此,我删除了我的答案)。所以,请给一些 MR/CoreData 初始化代码。 - (void) setupCoredataStack NSURL *storeURL2 = [NSPersistentStore MR_urlForStoreName:kSQLLiteStoreName2]; //NSLog(@"store2 URL %@", storeURL2); if ([[NSFileManager defaultManager] fileExistsAtPath:[storeURL2 path]]) [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:kSQLLiteStoreName2]; DDLogWarn(@"Magical Record Stack: %@", [MagicalRecord currentStack]); DDLogWarn(@"Store2 创建后的 URL %@", [NSPersistentStore MR_defaultPersistentStore].URL);返回; 【参考方案1】:

最后我最终使用手动迁移而不是自动/轻迁移。这解决了问题

请查看此链接,非常有用https://github.com/magicalpanda/MagicalRecord/issues/466

【讨论】:

以上是关于核心数据自动迁移不起作用的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 轻量级迁移不起作用

swift 3中的核心数据轻量级迁移不起作用

使 django 项目文件夹的迁移不起作用

Grails 数据库迁移插件 updateOnStart 不起作用

启用迁移不起作用

Laravel 迁移不起作用