How come I can cast to NSManagedObject but not to my entity's type?

core-data, ios, swift

Solution

Make sure your Class name field is actually Module.Task, where Module is the name of your app. CoreData classes in Swift are namespaced. Right now, your object is being pulled out of the context as an NSManagedObject, not as a Task, so the as-cast is failing.

Problem

I'm using the Swift boilerplate code for Core Data in a fresh project. My `.xcdatamodeld` file has a single entity defined (`Task`) with a single attribute (`name`). I have a `Task.swift` file that looks like this: ``` import CoreData class Task: NSManagedObject { @NSManaged var name: String } ``` When I run this, it works: ``` var firstTask = NSEntityDescription.insertNewObjectForEntityForName("Task", inManagedObjectContext: managedObjectContext) as NSManagedObject firstTask.setPrimitiveValue("File my TPS reports", forKey: "name") var error: NSError? managedObjectContext.save(&error) ``` I can even go into the SQLite database being used by the iOS simulator and confirm that the row was added. However, when I run the exact same code as above but with `as Task` instead of `as NSManagedObject`, I get a crash with the error message `Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)`, associated with the `var firstTask`… line. If I continue execution, I get `EXC_BAD_ACCESS` and `0 misaligned_stack_error_` at the top of Thread 1 each time I advance it. Why might this cast lead to all this?

Original source

Related problems