Swift + CoreData:不能在生成的NSManagedObject子类上自动设置可选属性

我有一个名为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 } 

但是,如果xcode可以用(?)自动设置子类中的可选值,我只需要这样做:

 branch.dateUpdated = self.coreData.serverUTCDateFormatter.dateFromString(dateString) 

在我的情况下,我有一堆属性,我需要手动标记为可选。

核心数据模型编辑器中的可选checkbox在Swift及其引入的选项之前已经存在。 苹果公司在其“ 核心数据编程指南”中说到:

你可以指定一个属性是可选的 – 也就是说,它不需要有一个值。 但是,通常情况下,您不鼓励这样做 – 特别是对于数值(通常您可以使用具有默认值的强制属性(在模型中为0)获得更好的结果)。 这样做的原因是SQL对NULL的特殊比较行为与Objective-C的nil不同。 数据库中的NULL不等于0,search0将不匹配具有NULL的列。

因此,使用Swift和Xcode 8,可选checkbox(仍然)与您将属性定义为可选项或不在managedObject子类中的事实无关。 不要指望可选checkbox在您使用Editor > Create NSManagedObject Subclass创build它们时对您的NSManagedObject子类属性可选types有任何影响。

也就是说,每当我需要一个属性在模型编辑器中选中它的可选checkbox,我立即把它的NSManagedObject子类声明作为一个可选项。


附录

每次在数据模型检查器中为每个实体属性更改此选项并重build项目时, Mogenerator都能够自动将NSManagedObject子类属性从非可选项切换为可选项。

解决方法:

是的,这似乎是一个错误/限制。 使用非标量types来解决这个问题。

可选属性

  • 选中可选checkbox
  • 取消选中标量checkbox

非可选属性

  • 取消选中可选checkbox
  • 选中标量checkbox

可能的原因:

Swift代码被转换成Objective-C,而Objective-C不支持非类types的nil值。