Swift CoreData: error: Failed to call designated i

2020-02-12 07:37发布

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?

2条回答
地球回转人心会变
2楼-- · 2020-02-12 07:51

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

查看更多
We Are One
3楼-- · 2020-02-12 08:08

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?.

查看更多
登录 后发表回答