Xcode 7 更新:Xcode 7 beta 2 已解决此问题。
可选的核心数据属性现在定义为可选属性
在 Xcode 生成的托管对象子类中。它不再是
编辑生成的类定义所必需的。
(之前的回答:)
创建时NSManagedObject
对于子类,Xcode 不会为那些在 Core Data 模型检查器中标记为“可选”的属性定义可选属性。
这对我来说看起来像是一个错误。
作为解决方法,您可以将该属性转换为
一个可选的(as String?
在你的情况下),然后使用可选绑定进行测试
if let notice = someManagedObject.noticeText as String? {
println(notice)
} else {
// property not set
}
在你的情况下,那就是
if let notice = formQuestions[indexPath.row].noticeText as String? {
println(notice)
} else {
// property not set
}
Update:从 Xcode 6.2 开始,此解决方案不再有效
并因 EXC_BAD_ACCESS 运行时异常而崩溃
(比较Swift:在运行时检测到非可选中意外的 nil 值:强制转换为可选失败)
下面的“旧答案”解决方案仍然有效。
(旧答案:)
正如 @Daij-Djan 已经在评论中指出的那样,您必须定义属性
可选的核心数据属性为optional or 隐式解包可选:
@NSManaged var noticeText: String? // optional
@NSManaged var noticeText: String! // implicitly unwrapped optional
不幸的是,Xcode 在创建时没有正确定义可选属性
NSManagedObject 子类,这意味着您必须重新应用更改
如果您在模型更改后再次创建子类。
此外,这似乎仍然没有记录,但两种变体都在我的测试用例中起作用。
您可以使用以下命令测试该属性== nil
:
if formQuestions[indexPath.row].noticeText == nil {
// property not set
}
或带有可选作业:
if let notice = formQuestions[indexPath.row].noticeText {
println(notice)
} else {
// property not set
}