Swift CoreData:错误:无法在NSManagedObject类上调用指定的初始化程序' NSManagedObject'

时间:2014-08-26 11:31:09

标签: ios iphone core-data swift nsmanagedobject

我正在使用核心数据来保存vc1中的类别,并希望将列表属性添加到vc2中的列表中。我的数据模型是许多列表属性的一个类别。

我在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)
}

在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
    }
}

它在最后一行崩溃:self.managedObject = ...说:

CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject' 

如果我放置一个断点并打印数组,托管对象就在数组中。怎么了?

2 个答案:

答案 0 :(得分:6)

专用初始化程序是

class func insertNewObjectForEntityForName(_ entityName: String!,
   inManagedObjectContext context: NSManagedObjectContext!) -> AnyObject!

显然,您没有插入新对象,因此您确实需要一个可选值。也许您将类变量managedObject声明为NSManagedObject!?尝试将其设置为NSManagedObject?,并将操作符更改为as?

答案 1 :(得分:1)

Core Data中的实体等同于一个类。您是否将实体添加到托管对象模型中,并将实体子类化? (查看programming guide以获得更全面的背景。)