【问题标题】:Core Data: Could not cast value of type 'MyType_MyType_2' to MyType核心数据:无法将“MyType_MyType_2”类型的值转换为 MyType
【发布时间】:2015-11-09 23:25:44
【问题描述】:

我有一个 Objective-C 模型类 MyType。这个类在 Swift 代码中使用:

NSEntityDescription.insertNewObjectForEntityForName("MyType", inManagedObjectContext: context) as! MyType

as! 转换导致错误消息

Core Data: Could not cast value of type 'MyType_MyType_2' (0x7be99a30) to MyType (0xf33db74).

如果我将其转换为NSManagedObject,它就可以工作。当我打印结果时,我仍然可以看到,它是 MyType 的一个实际实例:

<MyType: 0x7ae06d50> (entity: MyType; id: 0x7aeba6d0 <x-coredata:///MyType/t957F2860-85F8-46E0-B6D6-4D1DF6C4EC613> ; data: { 
    ...the fields...
})

这里发生了什么?还有MyType_MyType_2这个名字是怎么来的?

【问题讨论】:

  • 你在 MyType 类声明前加了@objc(MyType) 吗?
  • 不,正如我所说,模型 MyType 已经是 Objective-C 代码。
  • 我有同样的问题,在项目和其他目标中工作正常,但在我的测试目标上没有工作。此外,它正在工作,在 XCode 更新后不知道它停止了哪个版本(当前为 8.3.2)。由于这次崩溃,我无法运行我的测试。知道如何解决吗?下面的建议没有帮助:(

标签: swift core-data casting nsmanagedobject


【解决方案1】:

当我遇到这个问题时,是因为我忘记在实体上设置“类”。这是我想出的:

  1. 单击文件结构/项目中的 .xcdatamodelId 文件 导航器窗格(最左侧)。
  2. 选择您遇到问题的实体。
  3. 在“实用程序”窗格(最右侧)中,查找看起来像 1997 年手机的图标,即数据模型检查器。
  4. 在实体设置下,您应该看到两个字段,“名称”和“类” - 使用您正在使用的类的名称设置“类”(通常与“名称”相同)。

在执行这些步骤之前,您甚至会注意到默认的“类”是 NSObject,反映了错误消息。我也找到了一些编程方法来做到这一点,但这似乎是最简单/最快的解决方案。

我应该注意到我的模型是用 Swift 编写的,所以我确实必须添加 @zellb 提到的 @objc(Entity) 互操作性参考。但是,只要您正确地执行该部分,那不应该对解决方案产生影响(这会导致与我的理解不同的不相关错误)。

【讨论】:

  • 它看起来像一个 Tomagotchi 图标,用于数据模型检查器。
【解决方案2】:
  1. 设置实体类名
  2. 如下所示设置模块“当前产品模块”

【讨论】:

  • 我在 xCode 7 中开始了我的 Swift 项目,我在那里创建的实体指定了Module,如上所示。现在在 xCode 8 (8A218a) Module 在创建新实体后为空。如上所述指定为我修复了它。
  • 不幸的是,当我使用 Objective-C CoreData 时,这会导致 stackoverflow.com/q/39931137/2740693。有什么见解吗?
  • 我还必须输入类名,然后添加:按 cmd + k(干净)并再次构建 cmd + b。运行您的项目。它对我有用。谢谢!
【解决方案3】:

试试这个:

@objc(MyType)
public class MyType: NSManagedObject {
    // your class
}

而不是这个:

class MyType: NSManagedObject {
    // your class
}

【讨论】:

    【解决方案4】:

    我在实体部分的数据模型检查器中错误地在我的一个实体中设置了“父实体”。我误以为是指一对多关系的目的地。

    将其设置回“无父实体”解决了问题,尽管我确实必须在模拟器中删除并重新安装应用程序以处理混乱的核心数据数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      相关资源
      最近更新 更多