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?
The dedicated initializer is
class func insertNewObjectForEntityForName(_ entityName: String!,
inManagedObjectContext context: NSManagedObjectContext!) -> AnyObject!
Clearly, you are not inserting a new object, so you really want an optional value. Maybe you declared your class variable managedObject as NSManagedObject!? Try setting it to NSManagedObject? and also change the operator to as?.
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.)
来源:https://stackoverflow.com/questions/25504799/swift-coredata-error-failed-to-call-designated-initializer-on-nsmanagedobject