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

u59ebvdq  于 2023-02-13  发布在  其他
关注(0)|答案(4)|浏览(107)

我有一个名为Film的核心数据实体,它有属性title和date。我注意到生成的NSManagedObject子类包含可选的NSManaged属性,尽管我在核心数据检查器中将这些属性标记为非可选。

我可以手动将其更改为非可选属性吗?还是将其保留为可选属性是更好的选择?为什么?

bvuwiixz

bvuwiixz1#

“可选”对Core Data和Swift的含义有所不同。

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

将Core Data属性设置为非可选并不意味着它在Swift意义上是非可选的。这就是为什么生成的代码将这些属性设置为可选的原因--就Core Data而言,除非在保存更改时,否则具有空值是法律的的。
更新:在写完这个答案后,我写了一篇深潜博客文章,更详细地解释了事情:https://www.atomicbird.com/blog/clash-of-the-optionals/

xam8gpfp

xam8gpfp2#

这是一个已知的问题。有些人把它改为非可选的,没有任何负面影响,我保持它的方式,它是产生,并希望早日修复。
如果你向苹果提交一个bug来提高可见性和优先级,这总是有帮助的。

wooyq4lh

wooyq4lh3#

创建ManagedObject类并将实体类类型更改为Manual,然后将这些类添加到您的项目范围中。
编辑您的managedObject,使其成为非可选的。这意味着您需要自己维护该类,并在核心数据模型和类中进行任何更改
如果您的数据模型是稳定的,不会被更改,那么您可以使用这个。

envsm3lx

envsm3lx4#

数据模型检查器中的可选复选框与Swift选项无关。该复选框决定属性是否需要有值。
如果取消选择某个属性的“可选”复选框,则必须为该属性赋值,否则在保存时将出错。通过选中“可选”复选框,可以在不为该属性赋值的情况下进行保存。假设您有一个字符串说明属性。如果选中“可选”复选框,则可以将说明留空,但仍然可以保存实体。
再举一个例子。假设您有一些文本字段,可供人员输入其家庭电话、工作电话和手机号码。这些电话号码应该是可选属性。您不希望仅为了保存人员的数据而要求人员具有家庭电话、工作电话和手机号码。

相关问题