升级到 XCode 6.3.2 后核心数据模型找不到自动生成的实体类(使用 Objective-C 而不是 Swift)

Posted

技术标签:

【中文标题】升级到 XCode 6.3.2 后核心数据模型找不到自动生成的实体类(使用 Objective-C 而不是 Swift)【英文标题】:Core data model not finding auto-generated entity classes after upgrading to XCode 6.3.2 (using Objective-C rather than Swift) 【发布时间】:2015-05-22 06:45:50 【问题描述】:

今天我升级到 XCode 6.3.2。我有一个生成许多不同应用程序的 XCode 项目。每个应用程序都是不同的编译目标。所有应用程序都使用相同的核心数据模型。核心数据模型有 4 个版本。最新的是当前的。核心数据模型已用于自动生成 Objective-C 实体类。这些实体类包含在每个不同的编译目标中。该应用程序中没有 Swift 代码。一切都在 Objective-C 中实现。

应用仍在编译并开始执行。但是,一旦加载核心数据系统,它们就会崩溃。应用程序崩溃并显示消息:

[GGPDescriptionMapping setKingdom:]: unrecognized selector sent to instance ...

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GGPDescriptionMapping setKingdom:]: unrecognized selector sent to instance ...

应用程序使用旧版本的 xcode 和最新的核心数据模型编译并运行良好。使用新版本的 xcode,即使在 xcode 界面中选择了最新版本的核心数据模型作为当前数据模型,编译的应用程序中正在使用旧数据模型,从而引发上述各种问题。

【问题讨论】:

你不能重新创建 NSManagedObject 类吗? 这是我做的第一件事,但没有运气。仍在调查这个问题 - 看起来最新版本的 xcode 使用的数据模型版本比被选为当前活动数据模型版本的数据模型版本更旧。仍在调查为什么会这样,但与此同时,将当前的数据模型版本更改为旧版本,运行应用程序,看着它崩溃。从设备或模拟器中删除应用程序,然后将当前数据模型版本更改回最新版本并再次运行应用程序即可解决问题。 【参考方案1】:

将当前的数据模型版本更改为旧版本,运行应用程序,再次观察它崩溃。从设备或模拟器中删除应用程序(可能不需要?)然后使用 xcode 界面将当前数据模型版本更改回最新版本并再次运行应用程序。这成功地说服了 xcode 6.3.2 再次使用正确的数据模型。

【讨论】:

以上是关于升级到 XCode 6.3.2 后核心数据模型找不到自动生成的实体类(使用 Objective-C 而不是 Swift)的主要内容,如果未能解决你的问题,请参考以下文章

核心数据迁移 - 我们可以在 xcode 中有多个 .xcmapingmodel 文件吗?

缺少 Xcode 核心数据模型

IOS/xcode:将核心数据从应用委托移动到模型类

将存储在 sqlite 中的用户数据迁移到应用升级中的核心数据

应用升级后核心数据关系丢失

在 Xcode 6 中从核心数据数据模型创建 NSManagedObject 子类