【问题标题】:Optional (numeric) attributes without default value in Core Data - why are they discouraged?Core Data 中没有默认值的可选(数字)属性 - 为什么不鼓励使用它们?
【发布时间】:2014-05-09 15:38:51
【问题描述】:

Apple Core Data Programming Guide 说:

您可以指定一个属性是可选的——也就是说,它不是 需要有一个值。但是,一般情况下,您会感到气馁 这样做——尤其是对于数值(通常你可以得到 使用具有默认值的强制属性获得更好的结果——在 型号—0)。原因是SQL有特殊的比较 NULL 的行为与 Objective-C 的 nil 不同。数据库中的 NULL 与 0 不同,搜索 0 将不会匹配具有 空。

但我需要我的属性在创建时完全没有价值(无)。我不能有0(零)或任何其他默认值,因为这会导致错误的域数据。

那么,如果我将我的数字核心数据属性定义为可选且没有默认值,会出现什么问题?我可以和他们住在一起吗?

【问题讨论】:

  • 就我的 2 美分,为了我的工作,我必须处理很多来自其他行业的数据,而且数据经常丢失,我们不得不忍受这种情况。所以这就是NULL的意思,它意味着没有数据。而且我也认为这就是书中所说的,NULL 与零不同。是的,你可以忍受它,知道零和 NULL 之间的区别

标签: objective-c cocoa core-data null


【解决方案1】:

假设您的数据库中有一个数字(例如int)可选列。如果将其留空,则 DB 中将有一个 NULL。现在说你继承NSManagedObject 并在你的对象中使用原始类型。该列将映射到 int 属性。当对象被加载时,它会在里面放什么?不能是nil,也不能是零。

不鼓励,而不是禁止。只是不要在模型对象中使用原始类型,根据您的说法,如果您需要能够支持 nil,则无论如何都不会在这种情况下使用原始类型。

【讨论】:

  • 好的。我必须调查 Core Data 属性类型转换为模型对象中的哪些真实类型。我天真地希望,它会是 NSNumbers——但也许它们真的是原始的 C 类型。
  • 你有两个选择。在“subclass NSManagedOject”对话框中有一个复选框可以选择你想要的。我认为默认情况下它是 NSNumber,但关键是他们不鼓励它,只是为了避免出现问题,以防你选择原语。所以不要选择基元,你会很好地使用可选列。
  • 我想在swift中它并不重要,因为NSNumberInt都可以是可选的,因此设置为nil(虽然我认为在技术上,Int等. 不是原始类型,与 C/Objective-C 中的基本类型相同;也许它们在内部是 structs?)。
猜你喜欢
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2012-10-03
  • 2020-04-05
相关资源
最近更新 更多