我有EntityA
一个可选属性 int32 result
。当我创建时,EntityA
我没有设置result
属性。然后稍后当我获取它时,我希望它具有nil
价值,但由于某种原因,3
即使我没有设置此属性,它也被设置为。
这里发生了什么?
我有EntityA
一个可选属性 int32 result
。当我创建时,EntityA
我没有设置result
属性。然后稍后当我获取它时,我希望它具有nil
价值,但由于某种原因,3
即使我没有设置此属性,它也被设置为。
这里发生了什么?
第一个可能的问题:
您在模型编辑器中设置了默认值。选择属性并检查检查器。
第二个可能的问题:
您正在检索或显示错误的值。显示您正在使用的代码以找出结果为“3”。
第三个可能的问题:
您稍后无意中设置了值,可能是在循环或类似的情况下。对属性进行文本搜索以查找代码中可能出现的情况。
您的 int32 将存储在一个 NSNumber 对象中。如果您不提供值,则不会创建 NSNumber 对象 - sql 会将其视为 NULL。
iOS 核心数据编程指南说:
您可以指定一个属性是可选的——也就是说,它不需要有一个值。但是,通常不鼓励您这样做,尤其是对于数值(通常,您可以使用具有默认值(在模型中)为 0 的强制属性获得更好的结果)。原因是 SQL 对 NULL 有特殊的比较行为,这与 Objective-C 的 nil 不同。数据库中的 NULL 与 0 不同,搜索 0 将不会匹配具有 NULL 的列。
因此,最好将属性设为强制并将其设置为不同的值,或者从一开始就传入 NSNumber。