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

10,445

Solution 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).

Solution 2

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

enter image description here

Solution 3

just try this:

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

instead of this:

class MyType: NSManagedObject {
    // your class
}
Share:
10,445
Bastian
Author by

Bastian

Updated on June 17, 2022

Comments

  • Bastian
    Bastian almost 2 years

    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?

  • Vito Royeca
    Vito Royeca about 8 years
    It looks like a Tomagotchi icon though, for the Data Model Inspector.
  • Murray Sagal
    Murray Sagal over 7 years
    I started my Swift project in xCode 7 and entities I created there had Module specified as shown above. Now in xCode 8 (8A218a) Module is empty after creating a new entity. Specifying as above fixed it for me.
  • Christian Di Lorenzo
    Christian Di Lorenzo about 6 years
    Unfortunately, this causes stackoverflow.com/q/39931137/2740693 when I'm using Objective-C CoreData. Any insights?
  • Dasoga
    Dasoga over 5 years
    I had to put the class name as well and just adding: press cmd + k (clean) and build cmd + b again. Run your project. It worked for me. thanks!