我有一个简单的 NSManagedObject
子类:
@objc class MyModel: NSManagedObject {
@NSManaged var myProperty: String
}
但是,下面的代码:
var model = NSEntityDescription.insertNewObjectForEntityForName("MyModel", inManagedObjectContext: managedObjectContext) as MyModel
assert(model != nil) // passes
if model.myProperty != nil { //crashes
println("not nil")
}
在 if model.myProperty != nil
和 EXC_BAD_ACCESS
处崩溃。为什么会这样?这仅在 Beta 5 中才开始发生,并在 Beta 4 中正常工作。
上面的类是使用 Xcode 自动生成的,所以他们没有在属性的末尾添加 ?
。但是,手动添加 ?
到属性的末尾确实可以解决问题(@NSManaged var myProperty: String?
)。
我的问题是,如果 Xcode 在模式中被标记为可选,为什么 Xcode 不自动添加问号,为什么这在以前的测试版中不是问题?
最佳答案
要让它工作,你应该做两件事:
1) 在 NSManagedObject
子类中添加 ?使属性可选
@objc class MyModel: NSManagedObject {
@NSManaged var myProperty: String? // <-- add ? here
}
2) 按照上一个答案中的建议在您的实现中
if let aProperty = model.myProperty? {
// do something with aProperty
}
请注意,如果您忘记添加 ?在 NSManagedObject
子类中我们有编译错误。
关于core-data - 检查零核心数据属性导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141642/