核心数据:无法转换类型' MyType_MyType_2'到MyType

时间:2015-08-17 10:48:17

标签: swift core-data casting nsmanagedobject

我有一个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来自何处?

4 个答案:

答案 0 :(得分:38)

当我遇到这个问题时,那是因为我忘了设置&#34;类&#34;在实体上。这就是我想出的:

  1. 单击文件结构/项目中的.xcdatamodelId文件 导航窗格(最左侧)。
  2. 选择您遇到问题的实体。
  3. 在“工具”窗格(最右侧)中,查找看起来像1997手机的图标,数据模型检查器。
  4. 在实体设置下,您应该看到两个字段,&#34;名称&#34;和#34; Class&#34; - 设置&#34; Class&#34;使用您正在使用的类的名称(通常与&#34; Name&#34;相同)。
  5. 在您按照这些步骤操作之前,您甚至会注意到默认的&#34;类&#34;是NSObject,反映了错误消息。我发现了一些编程方法,但这似乎是最简单/最快的解决方案。

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

答案 1 :(得分:31)

  1. 设置实体类名称
  2. 设置模块&#34;当前产品模块&#34;如下
  3. enter image description here

答案 2 :(得分:5)

试试这个:

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

而不是:

class MyType: NSManagedObject {
    // your class
}

答案 3 :(得分:0)

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

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