我有一个名为Record的coredata实体,并且有一个属性dateUpdated.我注意到生成的NSManagedObject子类没有可选标记(?)
CoreData编辑器:

生成的子类:

预期:

更新: 这是乏味的在我的部分,因为我想再生子类每一次,这意味着我还需要手动更新所有可选值.在子类中使用非可选(不带'?')会导致我在分配之前检查evalue,如下例所示:
// sample value:
// serverDateFormatter = "yyyy/MM/dd"
// dateString = ""
// Branch is a subclass of Record (see above images)
var date = self.coreData.serverDateFormatter.dateFromString(dateString)
if date != nil
{
branch.dateUpdated = date
}
Run Code Online (Sandbox Code Playgroud)
但是如果xcode可以在子类中使用(?)自动设置可选值,我只需要这样做:
branch.dateUpdated = self.coreData.serverUTCDateFormatter.dateFromString(dateString)
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我有一堆属性需要手动标记为可选.
我正在 macOS 10.13.6 High Sierra 上使用 Xcode 10 + Swift 4.2。我创建了一个数据模型,并让 Core Data 自动为数据模型实体生成类。在大多数情况下,这按预期工作。但是,我无法弄清楚如何预测生成的类中的某些属性是否将成为Optional类型;它似乎并不取决于相应的属性是否被声明为“可选”(即在属性描述中选中了“可选”复选框)。有人可以帮我弄清楚 Xcode 如何确定是否将类属性设为可选吗?
这是我从我的项目中得出的一个小例子。我只是用虚构的名称替换了项目特定的名称,但其他一切都相同。首先这里是从数据模型中提取的 Foo 实体的描述:
<entity name="Foo" representedClassName="Foo" parentEntity="FooParent" syncable="YES" codeGenerationType="class">
<attribute name="v1" attributeType="Date" usesScalarValueType="NO" syncable="YES"/>
<attribute name="v2" attributeType="Boolean" usesScalarValueType="YES" syncable="YES"/>
<attribute name="v3" optional="YES" attributeType="Boolean" usesScalarValueType="YES" syncable="YES"/>
<attribute name="v4" optional="YES" attributeType="UUID" usesScalarValueType="NO" syncable="YES"/>
<attribute name="v5" optional="YES" attributeType="String" syncable="YES"/>
<relationship name="v6" toMany="YES" deletionRule="Nullify" destinationEntity="Bar"
inverseName="baz" inverseEntity="Bar" syncable="YES"/>
</entity>
Run Code Online (Sandbox Code Playgroud)
如您所见,v1、v2 和 v6 在数据模型中未声明为可选,而 v3、v4 和 v5 声明为可选。这是生成的代码,我在我的项目的 Xcode/DerivedData 文件夹下的 Foo+CoreDataProperties.swift 中找到了它。
extension Foo {
@nonobjc public …Run Code Online (Sandbox Code Playgroud)