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

Dav*_*ide 41 xcode core-data ios swift

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

在此输入图像描述

在此输入图像描述

我可以手动将其更改为非可选属性,还是将其作为可选项更好的选择?为什么?

Tom*_*ton 59

"可选"意味着与核心数据不同于Swift.

  • 如果Core Data属性不是可选的,则在保存更改时它必须具有非零值.在其他时候,Core Data不关心属性是否为零.
  • 如果斯威夫特属性不是可选的,它必须有一个非空值在任何时候都初始化完成之后.

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

  • 确保至少在`override func awakeFromInsert()`中分配任何非可选变量. (3认同)
  • 使它成为非可选的解决方案是什么。我应该创建手动文件并使它们成为非可选的,因为这样有效吗? (2认同)

Mir*_*ekE 7

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

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

  • 在 XCode 11.3.1 中仍然发生。现在已经是2020年了。 (4认同)
  • 仍在 Xcode 10.1 中发生。我想,在 Apple 的情况下,“早期修复”最多意味着几年。 (2认同)
  • 在 Xcode 11.5 版本中仍然发生。今年是2020年(现在正在发生大流行)。 (2认同)