Objective c 核心数据-获取具有可选属性的对象

Objective c 核心数据-获取具有可选属性的对象,objective-c,core-data,Objective C,Core Data,我有一个EntityA,它有一个可选属性int32result。当我创建EntityA时,我没有设置result属性。然后,当我稍后获取它时,我希望它具有nil值,但由于某种原因,它被设置为3,即使我没有设置此属性 这里发生了什么?您的int32将被打包存储到NSNumber对象中。如果不提供值,则不会创建NSNumber对象-sql将其视为NULL 《iOS核心数据编程指南》指出: 您可以指定属性是可选的,也就是说,它不是可选的 需要有一个值。然而,总的来说,你会感到气馁 特别是对于数值(通常

我有一个
EntityA
,它有一个可选属性int32
result
。当我创建
EntityA
时,我没有设置
result
属性。然后,当我稍后获取它时,我希望它具有
nil
值,但由于某种原因,它被设置为
3
,即使我没有设置此属性


这里发生了什么?

您的int32将被打包存储到NSNumber对象中。如果不提供值,则不会创建NSNumber对象-sql将其视为NULL

《iOS核心数据编程指南》指出:

您可以指定属性是可选的,也就是说,它不是可选的 需要有一个值。然而,总的来说,你会感到气馁 特别是对于数值(通常可以 使用具有默认值的强制属性可以获得更好的结果 模型(0)。这是因为SQL具有特殊的比较功能 与Objective-C的nil不同的NULL行为。数据库中的NULL 与0不同,对0的搜索将不匹配 空

因此,最好将属性设置为强制属性并将其设置为不同的值,或者从一开始就传入NSNumber。

第一个可能的问题:
您已经在模型编辑器中设置了默认值。选择属性并选中检查器

第二个可能的问题:
您正在检索或显示错误的值。显示用于确定结果为“3”的代码

第三个可能的问题:

您后来无意中设置了该值,可能是在循环或类似的情况下。对属性进行文本搜索,以查找代码中可能出现的属性。

太好了。默认值救了我。谢谢