Core Data: Could not cast value of type 'MyType_MyType_2' to MyType

纵然是瞬间 提交于 2019-11-29 10:51:58

问题


I have an Objective-C model class MyType. This class is used in Swift code:

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

The as! cast results in the error message

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

If I cast it as NSManagedObject it works. When I print the result, I can nevertheless see, that it is an actual instance of MyType:

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

What is happening here? And where does the name MyType_MyType_2 come from?


回答1:


When I had this issue, it was because I had forgotten to set the "class" on the entity. This is what I came up with:

  1. Click on .xcdatamodelId file in your file structure/project navigator pane (far left).
  2. Select the entity that you are having issues with.
  3. In the Utilities pane (far right), look for the icon that looks like a 1997 cell phone, the Data Model Inspector.
  4. Under the entity settings, you should see two fields, "Name" and "Class" - set up "Class" with the name of the class you are using (typically the same as "Name").

You'll even notice before you follow these steps that the default "class" is NSObject, reflecting the error message. I found some programatic ways to do this too, but this seemed like the simplest/quickest solution.

I should note that my model WAS written in Swift, so I did have to add the @objc(Entity) interoperability reference mentioned by @zellb. But that shouldn't make a difference in the solution as long as you are doing that part properly (and that would cause a different unrelated error from my understanding).




回答2:


  1. Set Entity Class Name
  2. Set Module "Current Product Module" like below




回答3:


just try this:

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

instead of this:

class MyType: NSManagedObject {
    // your class
}



回答4:


I had mistakenly set a "parent entity" in one of my entities in the data model inspector in the entity section. I mistakenly thought that referred to the destination of a one-to-many relationship.

Setting it back to "no parent entity" fixed the problem, although I did have to delete and reinstall the app in the simulator to deal with the messed up core data database.



来源:https://stackoverflow.com/questions/32048458/core-data-could-not-cast-value-of-type-mytype-mytype-2-to-mytype

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!