【问题标题】:Swift CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'Swift CoreData:错误:无法在 NSManagedObject 类“NSManagedObject”上调用指定的初始化程序
【发布时间】:2014-10-19 17:14:43
【问题描述】:

我正在使用核心数据在 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' 

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

【问题讨论】:

  • 您正在执行两次获取请求。为什么?
  • 我在检查它是否存在,但没有它似乎也能工作......
  • 测试只检查 fetch 是否返回一个数组,甚至是一个空数组。
  • 好的,很高兴知道。如您所知,我是新手 :) 感谢您的帮助。

标签: ios iphone core-data swift nsmanagedobject


【解决方案1】:

CoreData 中的实体相当于一个类。您是否将实体添加到托管对象模型中,并将实体子类化? (查看programming guide 以获得更完整的背景。)

【讨论】:

    【解决方案2】:

    专用初始化器是

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

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

    【讨论】:

    • 这样设置:var managedObject: NSManagedObject? = NSManagedObject?() self.managedObject = self.listData.objectAtIndex(0) as? NSManagedObject 似乎工作。谢谢!
    猜你喜欢
    • 2023-03-12
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多