I'm using core data to save a category in vc1 and want to add list properties to a list in vc2. My data model is one category to many list properties.
I'm adding the category like this in vc1:
func createNewCategory() {
var category: NSManagedObject! = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as NSManagedObject
category.setValue(self.categoryTextField.text, forKey: "name")
var error: NSError? = nil
self.context.save(&error)
}
Setting up the data in vc2:
func setupCoreData() {
var appDelegate: AppDelegate = (UIApplication.sharedApplication()).delegate as AppDelegate
self.context = appDelegate.managedObjectContext!
var request: NSFetchRequest = NSFetchRequest(entityName: "Category")
if (self.context.executeFetchRequest(request, error: nil)) {
var error: NSError? = nil
self.listData = self.context.executeFetchRequest(request, error: &error)
self.managedObject = self.listData.objectAtIndex(0) as NSManagedObject
}
}
It crashes on the last row: self.managedObject = ...
saying:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'
The managed object is in the array if I put a break point and print the array. What's wrong?
An entity in CoreData is equivalent to a class. Did you add the entity to your managed object model, and subclass the entity? (Check out the programming guide for a fuller background.)
The dedicated initializer is
Clearly, you are not inserting a new object, so you really want an optional value. Maybe you declared your class variable
managedObject
asNSManagedObject!
? Try setting it toNSManagedObject?
and also change the operator toas?
.