gpt4 book ai didi

ios - 核心数据自定义迁移失败 : Can't add destination store

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:15 28 4
gpt4 key购买 nike

我有一个核心数据迁移的问题,它以我不理解的方式失败。

我有一个从旧版本数据模型的迁移路径,看起来像这样:

  1. v1 - 初始模型
  2. v2 - 需要轻量级迁移
  3. v3 - 需要轻量级迁移
  4. v4 - 需要自定义迁移
  5. v5 - 轻量级迁移

我正在整合一个集成测试来运行从 v1 到当前的迁移。我写了一个可以查询当前商店的小 helper ,并给定一个模型,运行正确类型的迁移。这或多或少奏效了,但我在自定义迁移步骤中遇到了一个我在概念上不理解的错误。

我正在使用 NSMigrationManager::migrateStoreFromURL其中有以下描述:

将指定源 URL 的商店迁移到目标 URL 的商店,执行映射模型中的所有映射。商店必须存在于源 URL 中;如果目标 URL 上不存在商店,则会创建一个(否则迁移将附加到现有商店。)调用此方法将对源模型和目标模型(以及映射模型)执行兼容性检查。如果错误在验证或迁移过程中发生,此方法将返回 NO。

测试用例复制到 v1 sqlite 存储并成功自动迁移到 v3,然后在自定义迁移时失败并出现此错误:

NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)"

UserInfo=0x210d740 {metadata={ NSPersistenceFrameworkVersion = 419; NSStoreModelVersionHashes = { lots of hashes that would be noise in this post...}; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "" ); NSStoreType = SQLite; NSStoreUUID = "0D2C0907-5F60-4EED-A61B-E726EEB0DA68"; "_NSAutoVacuumLevel" = 2; }, reason=The model used to open the store is incompatible with the one used to create the store

所以,回顾一下,我只有源存储,它已自动迁移到 v3。我没有目的地商店,我希望依靠 NSMigrationManager 来创建目的地商店。由于模型与不存在的商店不匹配,迁移将失败对我来说没有意义。有什么想法吗?

只是为了额外的上下文,在调试时,我已经验证我正在将所有参数的正确实例传递给该方法。源模型和目标模型已经加载,用于自定义迁移的映射模型是通过查询源模型和目标模型从测试包中加载的(一个有希望的结果,因为如果你有任何错误,这将失败),以及 URL 的对于 sqlite 商店看起来不错。

最佳答案

首先,确保将 -com.apple.CoreData.MigrationDebug 1 添加到 Xcode 方案中启动时传递的参数中。然后注意不要相信输出!

匹配部分模型和映射模型存在问题,显然是由于不正确的哈希值,不影响轻量级迁移。我自己目前正在与此作斗争,但我一直无法隔离触发此问题的条件,因此如果您能够隔离问题,请提交详细的错误!

如果您可以访问 iOS 7 测试版,那里的调试输出可能会更有帮助。在 iOS 6 中,调试输出的哈希值始终在映射模型和托管对象模型之间匹配,因此调试输出中显然存在错误。使用 iOS 7,如果这是您的问题,您可以隔离哪些实体不匹配,并隔离触发问题的特征(我到目前为止无法做到)。

就像完整性检查一样,您可能想尝试在版本 3 和版本 4 之间生成一个新的、干净的、原始的映射模型,不进行任何编辑,以确保您的映射模型和实际使用的模型之间没有任何不同步生成商店。您也可以在当前使用轻量级迁移的两个模型之间尝试相同的方法,以查看在这些情况下是否会出现问题,如果这是由于哈希值错误,则可能是预期的。

关于ios - 核心数据自定义迁移失败 : Can't add destination store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494180/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com