Xcode NSManagedObject子类在标记为非可选时包含选项

时间:2015-11-05 15:19:59

标签: ios xcode swift core-data

我有一个名为Film的核心数据实体,它具有属性标题和日期。我注意到生成的NSManagedObject子类包含可选的NSManaged属性,即使我在核心数据检查器中将属性标记为非可选属性。

enter image description here

enter image description here

我可以手动将其更改为非可选属性,还是将其保留为可选项更好?为什么呢?

4 个答案:

答案 0 :(得分:51)

“可选”表示与核心数据不同于Swift的内容。

  • 如果Core Data属性不是可选的,则在保存更改时必须具有非零值 。在其他时候,Core Data不关心属性是否为nil。
  • 如果Swift属性不是可选的,则初始化完成后,它必须始终具有非零值

使Core Data属性非可选并不意味着它在Swift意义上是非可选的。这就是生成代码使这些属性成为可选的原因 - 就核心数据而言,除了保存更改之外,拥有nil值是合法的。

答案 1 :(得分:4)

这是一个已知问题。有些人将其更改为非可选项而没有任何不利影响,我保持它的生成方式并希望尽早修复。

如果您向Apple提交错误以提高可见性和优先级,则总是有帮助。

答案 2 :(得分:0)

创建ManagedObject类并将实体类类型更改为manual并将这些类添加到您的项目范围。

编辑您的ManagedObject,使其成为非可选。这意味着您需要自己维护该类,并对核心数据模型和该类进行任何更改

如果您的数据模型稳定且不会更改,则可以使用它。

答案 3 :(得分:0)

数据模型检查器中的Optional复选框与Swift可选项无关。复选框确定该属性是否必须具有值。

如果取消选择属性的“可选”复选框,则必须为该属性指定一个值,否则在保存时会出现错误。通过选择“可选”复选框,可以保存而不给属性值。假设您有一个字符串描述属性。如果选中可选复选框,则可以将说明保留为空白,然后仍然保存实体。

这是另一个例子。假设您有文本字段可让一个人输入他们的住所,工作和手机号码。这些电话号码应为可选属性。您不想只要求某人拥有家庭电话号码,办公电话号码和手机号码即可保存该人的数据。