我有一个EntityA
,它有一个可选属性int32 result
。当我创建EntityA
时,我没有设置result
属性。然后,当我获取它时,我期望它具有nil
值,但由于某种原因,它设置为3
,即使我没有设置此属性。核心数据 - 具有可选属性的获取对象
这是怎么回事?
我有一个EntityA
,它有一个可选属性int32 result
。当我创建EntityA
时,我没有设置result
属性。然后,当我获取它时,我期望它具有nil
值,但由于某种原因,它设置为3
,即使我没有设置此属性。核心数据 - 具有可选属性的获取对象
这是怎么回事?
第一个可能的问题:
您已在模型编辑器中设置了默认值。选择属性并检查检查员。
第二可能的问题:
您检索或显示错误的值。显示你正在使用的代码来找出结果是'3'。
3日可能问题:
你设定值后不经意间,也许是在一个循环或类似的东西。对属性进行文本搜索以在您的代码中查找可能的事件。
你的int32将被存储到一个NSNumber对象中。如果您没有提供值,则不会创建NSNumber对象 - sql会将其视为NULL。
iOS的核心数据编程指南说:
您可以指定一个属性是可选的,也就是说,它是不是有一个值所需 。但是,通常情况下,您不鼓励 这样做 - 特别是对于数值(通常,您可以使用默认值 - 模型中的默认值为0的强制属性获得更好的结果)。原因是SQL对NULL的特殊比较 行为与Objective-C的nil不同。数据库 中的NULL与0不同,并且搜索0将不匹配具有 NULL的列。
因此,将属性设置为强制性并将其设置为不同的值或从头开始传入NSNumber可能会更好。
太好了。默认保存了我。谢谢! –