核心数据迁移 - 找不到迁移的映射模型

Posted

技术标签:

【中文标题】核心数据迁移 - 找不到迁移的映射模型【英文标题】:Core Data Migration - Can't find mapping model for migration 【发布时间】:2011-03-20 16:45:21 【问题描述】:

我按照此处找到的指南进行操作: http://www.timisted.net/blog/archive/core-data-migration/ 但是当我使用新模型启动应用程序时,不断收到“找不到用于迁移的映射模型”。我已经在 xcode 3 和 xcode 4 中多次尝试过,但永远无法让它工作。

目前我的选项设置为:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption,
    nil];

我之前为 infer 选项设置了 YES,但它只是在迁移时没有调用我需要迁移的自定义策略,我认为这是因为它之前也找不到映射模型。

我的映射模型没有被拾取是什么原因?我已经通过与 SVN 版本的对比来仔细检查之前的模型没有进行任何更改。

谢谢。

【问题讨论】:

【参考方案1】:

原来映射模型需要成为 .xcdatamodeld 包的一部分,这在 xcode 4 中是不可能做到的。有了它,它工作得很好。

注意:我的映射文件再次停止工作,我发现它在磁盘上是 0KB,所以我不得不重新创建它,之后它工作正常。我很快提交了它,看看它是否会再次消失。问题是 Xcode 4 索引它或其他东西,所以它在 xcode 中看起来很好,但在文件系统上它是空的。

请参阅下面的评论了解原因(xcode 4 的 mapc(地图编译器)已损坏)。

** 此问题已在较新的 XCODE/SDK 中得到修复。**

【讨论】:

在 xcode 4 中还有一些不完善的地方,我想我们刚刚找到了另一个,很高兴你让它工作了。 实际上,我还发现它在一段时间后再次停止工作,并且文件原来是 0KB,所以我认为 xcode 4 损坏了文件但保持它的索引或其他东西所以它的事实empty 不会在 xcode 本身中显示,但在 finder 中可见。非常烦人,但现在我知道要寻找它,将来会很快修复。感谢昨天的所有帮助。 您有没有找到更好的解决方案来解决这个问题?我已经发生过几次了。在 xc3 中打开和构建有时会修复它,但我认为这是构建周期没有修复我的 xcode 4 项目的副作用。 是的,我想通了。这是我给苹果的错误报告(他们认为这是一个已知问题):我们有两个模型,其中一个映射模型用于迁移。从 Xcode 3 编译和运行应用程序时,迁移按预期工作。移动到具有相同模型/映射模型的 xcode 4 会给我们一个“找不到用于迁移的映射模型”错误。从 xcode 3 usr/bin/ 获取 mapc 并将其复制到 xcode 4 usr/bin(在备份 xcode 4 之后)并在 xcode 4 中重建允许迁移按预期进行。 这似乎对我不起作用,关于可能导致此问题的任何其他想法?【参考方案2】:

我也遇到过类似的问题:

Custom Policy in my xcmappingmodel will not be executed

在我的情况下,它没有执行,因为我的迁移没有对表进行任何更改 - 也许这也是你的问题。

【讨论】:

【参考方案3】:

确保将源数据模型设置为您的旧版本,并将目标设置为新版本...当这些倒退时,我得到了上述错误。

【讨论】:

【参考方案4】:

您需要创建架构的新版本,而不是更改当前版本。假设您已经这样做了,对模型进行了哪些更改?有些变化太剧烈而无法可靠推断。

【讨论】:

是的,我的模型是版本化的,我已经创建了一个新版本。就像我在帖子中所说的那样,我使用的是映射模型和自定义策略,而不是试图推断它。问题是由于某种原因它没有找到映射模型。 对不起,我看错了代码,你能发一张你的映射模型的截图吗? 我不确定这是否有用,因为它们没有被使用。日志显示“找不到用于迁移的映射模型”。我已经检查过,映射模型确实选择了正确的版本。顺便说一句,测试这个的正确方法是什么。我一直在使用旧版模型从旧工作区安装它,然后使用新工作区模拟升级。当我告诉它推断模型时,这似乎有效,所以我认为它没问题。 这是为了确保您选择了正确的旧模型和新模型,(两个MOM都需要包含在构建中)我通常使用旧构建来生成数据,然后覆盖带有新版本的应用程序。 日志还有其他内容吗?

以上是关于核心数据迁移 - 找不到迁移的映射模型的主要内容,如果未能解决你的问题,请参考以下文章

核心数据模型迁移

核心数据测试迁移映射模型

具有多个映射模型的复杂核心数据迁移

使用映射模型在核心数据对象模型之间迁移

核心数据轻量级迁移属性重命名

使用 Core Data 轻量级迁移和 UIManagedDocument 的“找不到源存储模型”