如何在 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 子类不会取消它的多对多关系