ios - swift 核心数据 : error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'

标签 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' 

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

最佳答案

专用初始化器是

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

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

关于ios - swift 核心数据 : error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25504799/

相关文章:

ios - 通用闭包的 Swift 数组?

iphone - 如何从 Facebook 检索照片

ios - 将 MapKit 区域按钮操作转换为方法

iphone - 编辑后将实体保存在核心数据中

swift - 将实体数组保存在另一个实体下 CoreDataRelationships

c# - 无法使用 MonoGame 3 在 iOS 上加载字体

iphone - 如何在 iPhone 中以编程方式添加标签和文本框

ios - 在 iOS 应用程序中使用 JSON 的最佳方式是什么?

iphone - 使用 UIImages 在 iPhone 上显示进度条

objective-c - 与一个实体有多种关系而没有反向?