核心数据 - 使用可选属性获取对象

时间:2012-05-27 09:34:15

标签: objective-c core-data

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

这里发生了什么?

2 个答案:

答案 0 :(得分:3)

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

第二个可能的问题:
您正在检索或显示错误的值。显示您正在使用的代码,以找出结果为“3”。

第3个可能的问题:
您将在以后无意中设置该值,可能是在循环或类似的东西中。对文件进行文本搜索以查找代码中可能出现的内容。

答案 1 :(得分:0)

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

iOS核心数据编程指南说:

  

您可以指定属性是可选的 - 也就是说,不是   需要有价值。但是,一般来说,你是沮丧的   从这样做 - 特别是对于数值(通常你可以得到   使用带有默认值的强制属性的更好结果   模型 - 0)。原因是SQL有特殊的比较   与Objective-C的nil不同的NULL行为。数据库中为NULL   与0不同,搜索0与列不匹配   空值。

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