我有一个名为Film的核心数据实体,它具有属性标题和日期。我注意到生成的NSManagedObject子类包含可选的NSManaged属性,即使我在核心数据检查器中将属性标记为非可选属性。
我可以手动将其更改为非可选属性,还是将其保留为可选项更好?为什么呢?
答案 0 :(得分:51)
“可选”表示与核心数据不同于Swift的内容。
使Core Data属性非可选并不意味着它在Swift意义上是非可选的。这就是生成代码使这些属性成为可选的原因 - 就核心数据而言,除了保存更改之外,拥有nil值是合法的。
答案 1 :(得分:4)
这是一个已知问题。有些人将其更改为非可选项而没有任何不利影响,我保持它的生成方式并希望尽早修复。
如果您向Apple提交错误以提高可见性和优先级,则总是有帮助。
答案 2 :(得分:0)
创建ManagedObject类并将实体类类型更改为manual并将这些类添加到您的项目范围。
编辑您的ManagedObject,使其成为非可选。这意味着您需要自己维护该类,并对核心数据模型和该类进行任何更改
如果您的数据模型稳定且不会更改,则可以使用它。
答案 3 :(得分:0)
数据模型检查器中的Optional复选框与Swift可选项无关。复选框确定该属性是否必须具有值。
如果取消选择属性的“可选”复选框,则必须为该属性指定一个值,否则在保存时会出现错误。通过选择“可选”复选框,可以保存而不给属性值。假设您有一个字符串描述属性。如果选中可选复选框,则可以将说明保留为空白,然后仍然保存实体。
这是另一个例子。假设您有文本字段可让一个人输入他们的住所,工作和手机号码。这些电话号码应为可选属性。您不想只要求某人拥有家庭电话号码,办公电话号码和手机号码即可保存该人的数据。