我有一个简单的NSManagedObject子类:
@objc class MyModel: NSManagedObject {
@NSManaged var myProperty: String
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码:
var model = NSEntityDescription.insertNewObjectForEntityForName("MyModel", inManagedObjectContext: managedObjectContext) as MyModel
assert(model != nil) // passes
if model.myProperty != nil { //crashes
println("not nil")
}
Run Code Online (Sandbox Code Playgroud)
if model.myProperty != nil和a一起崩溃EXC_BAD_ACCESS.为什么会这样?这仅在Beta 5中开始,并且与Beta 4一起正常运行.
上面的类是使用Xcode自动生成的,因此它们没有添加?到属性的末尾.但是,手动将?属性添加到属性的末尾确实解决了问题(@NSManaged var myProperty: String?).
我的问题是,为什么Xcode不会自动添加问号,使其成为可选的,如果它在架构中标记为这样,为什么这在以前的测试版中不是问题?
小智 7
为了使它工作,你应该做两件事:
1)在NSManagedObject子类中添加?使该属性可选
@objc class MyModel: NSManagedObject {
@NSManaged var myProperty: String? // <-- add ? here
}
Run Code Online (Sandbox Code Playgroud)
2)在您的实现中,如上一个答案中所建议的那样
if let aProperty = model.myProperty? {
// do something with aProperty
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您忘记添加?在NSManagedObject子类中,我们有编译错误.
实际上,Apple 在其Swift 编程语言指南中建议的模式是
if let aProperty = model.myProperty? {
// do something with aProperty
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |