我有一个名为Film的核心数据实体,它有属性title和date。我注意到生成的NSManagedObject子类包含可选的NSManaged属性,尽管我在核心数据检查器中将这些属性标记为非可选。
我可以手动将其更改为非可选属性吗?还是将其保留为可选属性是更好的选择?为什么?
bvuwiixz1#
“可选”对Core Data和Swift的含义有所不同。
将Core Data属性设置为非可选并不意味着它在Swift意义上是非可选的。这就是为什么生成的代码将这些属性设置为可选的原因--就Core Data而言,除非在保存更改时,否则具有空值是法律的的。更新:在写完这个答案后,我写了一篇深潜博客文章,更详细地解释了事情:https://www.atomicbird.com/blog/clash-of-the-optionals/
xam8gpfp2#
这是一个已知的问题。有些人把它改为非可选的,没有任何负面影响,我保持它的方式,它是产生,并希望早日修复。如果你向苹果提交一个bug来提高可见性和优先级,这总是有帮助的。
wooyq4lh3#
创建ManagedObject类并将实体类类型更改为Manual,然后将这些类添加到您的项目范围中。编辑您的managedObject,使其成为非可选的。这意味着您需要自己维护该类,并在核心数据模型和类中进行任何更改如果您的数据模型是稳定的,不会被更改,那么您可以使用这个。
envsm3lx4#
数据模型检查器中的可选复选框与Swift选项无关。该复选框决定属性是否需要有值。如果取消选择某个属性的“可选”复选框,则必须为该属性赋值,否则在保存时将出错。通过选中“可选”复选框,可以在不为该属性赋值的情况下进行保存。假设您有一个字符串说明属性。如果选中“可选”复选框,则可以将说明留空,但仍然可以保存实体。再举一个例子。假设您有一些文本字段,可供人员输入其家庭电话、工作电话和手机号码。这些电话号码应该是可选属性。您不希望仅为了保存人员的数据而要求人员具有家庭电话、工作电话和手机号码。
4条答案
按热度按时间bvuwiixz1#
“可选”对Core Data和Swift的含义有所不同。
将Core Data属性设置为非可选并不意味着它在Swift意义上是非可选的。这就是为什么生成的代码将这些属性设置为可选的原因--就Core Data而言,除非在保存更改时,否则具有空值是法律的的。
更新:在写完这个答案后,我写了一篇深潜博客文章,更详细地解释了事情:https://www.atomicbird.com/blog/clash-of-the-optionals/
xam8gpfp2#
这是一个已知的问题。有些人把它改为非可选的,没有任何负面影响,我保持它的方式,它是产生,并希望早日修复。
如果你向苹果提交一个bug来提高可见性和优先级,这总是有帮助的。
wooyq4lh3#
创建ManagedObject类并将实体类类型更改为Manual,然后将这些类添加到您的项目范围中。
编辑您的managedObject,使其成为非可选的。这意味着您需要自己维护该类,并在核心数据模型和类中进行任何更改
如果您的数据模型是稳定的,不会被更改,那么您可以使用这个。
envsm3lx4#
数据模型检查器中的可选复选框与Swift选项无关。该复选框决定属性是否需要有值。
如果取消选择某个属性的“可选”复选框,则必须为该属性赋值,否则在保存时将出错。通过选中“可选”复选框,可以在不为该属性赋值的情况下进行保存。假设您有一个字符串说明属性。如果选中“可选”复选框,则可以将说明留空,但仍然可以保存实体。
再举一个例子。假设您有一些文本字段,可供人员输入其家庭电话、工作电话和手机号码。这些电话号码应该是可选属性。您不希望仅为了保存人员的数据而要求人员具有家庭电话、工作电话和手机号码。