Search code examples
iosxcodecore-dataswiftnsmanagedobject

Can't instantiate subclass of NSManagedObject


Xcode 6 has had a ton of bugs. But I'm not quite sure if this is a bug or not. It might not be since this is something I'm just now learning.

My issue is, any time I try to instantiate my subclass of NSManagedObject, I do not have the option to pass the entity: NSEntityDescription and NSManagedContext: insertIntoManagedContext argument to the constructor, Xcode says "Extra Argument 'entity' in call"

I created a new Xcode project from scratch, just to see if I could re-create the problem in a smaller, minimal project.

ToDoList.Item is set as the Item entity class in the Data Model Inspector.

Here's the code:

override func viewDidLoad() {

    super.viewDidLoad()

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!

    let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)!

    //compiler complains here
    var item = Item(entity: ent, insertIntoManagedObjectContext: context)!

}

Here's the subclass:

import UIKit
import CoreData

class Item: NSManagedObject {

    @NSManaged var title: String
    @NSManaged var completed: Bool

}

All help is appreciated.


Solution

  • Just came across the same problem: Init method for core data entity not available

    Obviously we have to implement the

    init(entity: NSEntityDescription, insertIntoManagedObjectContext context, NSManagedObjectContext?)
    

    method in our custom NSManagedObject class. So just add

    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
        super.init(entity: entity, insertIntoManagedObjectContext: context)
    }
    

    to your entity class and it will work.