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

Posted

技术标签:

【中文标题】如何在 swift 中将子类 NSManagedObject 分配给 var(而不是常量)【英文标题】:How to assign a subclassed NSManagedObject to a var (as opposed to a constant) in swift 【发布时间】:2014-07-03 17:36:39 【问题描述】:

我有一个由NSManagedObject 子类化的Juice 对象的实例变量数组,从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】:

问题是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)。

【讨论】:

啊,我明白了。我很确定Juice() 是问题所在,但无法弄清楚。谢谢马丁!

以上是关于如何在 swift 中将子类 NSManagedObject 分配给 var(而不是常量)的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将存储属性添加到 NSManagedObject 的子类

删除 NSManagedObject 子类不会取消它的多对多关系

在 Swift 2.0 中将图像添加到 UITableView

如何在多线程中将指针传递给子类 Qthread

如何在 Swift 中将 Int 转换为字符

如何在 Swift 中将 JSON 写入 Realm