Core Data 中没有默认值的可选(数字)属性 - 为什么不鼓励它们?

Mar*_*inW 1 null cocoa core-data objective-c

苹果的核心数据编程指南说:

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

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

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

mpr*_*vat 5

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

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

  • 你有两种选择。“子类 NSManagedOject”对话框中有一个复选框,可以选择您想要的那个。我认为默认情况下它是 NSNumber,但关键是他们不鼓励它只是为了避免问题,以防万一你选择了一个原语。所以只要不要选择原语,你就可以使用可选的列。 (2认同)