我的Swift 3应用程序使用CoreData。自从转换到Swift3/Xcode 8以来,我已经放弃了NSManagedObject
子类的自动代码生成(新行为,我还没有完全想到它),所以我只是指定非/手动并创建我自己的类。到现在为止还挺好。NSNumber类型的托管属性?未初始化为零
我存储我所有的标量在NSNumber?
性能属性,不是可有可无的标量类型,如Int?
,Double?
等。(我不知道,如果可选标性核心数据...?工作得很好)。
问题是,我无法检测到我刚创建的对象中属性的“Value not Yet Set”状态。
例如,我有:
class MyClass: NSManagedObject {
// Stores a double
@NSManaged var length: NSNumber?
}
每当我尝试访问的价值,我从来没有nil
,但0.0
代替:
if let value = myObject.length?.doubleValue {
// Always gets executes and value 0.0 is unwrapped
// for new objects
} else {
// Never gets executed
}
但是,如果我手动设置无实例插入,即:
override awakeFromInsert(){
super.awakeFromInsert()
// Explicitly set to nil:
self.length = nil
}
...然后,我得到预期的行为。
我错过了什么吗?
我在猜测@NSManaged
属性使它在许多方面不同于普通的快速可选属性......但我无法在任何地方找到这种行为。
属性可以为空? – Sulthan
您是否为核心数据模型检查器中的属性定义了*默认值*? –
哦,是的。即使我使用NSNumber手动生成代码,选中“使用标量类型”复选框并将默认值设置为零! :0 –