如何在swift中将子类NSManagedObject分配给var(而不是常量)

时间:2014-07-03 17:36:39

标签: ios core-data swift nsmanagedobject

我有一个完整的Juice个对象的实例变量数组,这些对象是NSManagedObject的子类,是从NSFetch检索的。

我像这样设置UITableViewCell标题,没有问题:

let currentJuice = juiceList[indexPath.row]

cell.text = currentJuice.name

但是,我试图在视图控制器之间传递Juice的实例。我声明了一个实例变量var selectedJuice = Juice()变量,然后在我放的willSelectRowAtIndexPath中:

 selectedJuice = juiceList[indexPath.row]

此行引发错误CoreData: error: Failed to call designated initializer on NSManagedObject class,我无法弄清楚原因!我也不知道如何在Juice课程中实现指定的init方法,如果有人可以帮助那个

1 个答案:

答案 0 :(得分:5)

问题是Juice()在不使用指定的情况下创建了Juice对象 NSManagedObject的初始化程序。实际上,您不需要分配默认值 物有所值。

您应该将该属性声明为可选

var selectedJuice : Juice? // (1)

或隐式展开的可选

var selectedJuice : Juice! // (2)

然后分配

selectedJuice = juiceList[indexPath.row]

应该没有问题。

在第一种情况(1)中,您将以

的身份访问该属性
if let theJuice = selectedJuice {
    // ...
} else {
    // no Juice selected
}

在第二种情况(2)中,您将以selectedJuice为单位访问该属性, 如果未设置(nil),则会收到运行时异常。