我有一个名为 Record 的 coredata 实体,并且有一个属性 dateUpdated。我注意到生成的 NSManagedObject 子类没有可选标记(?)
核心数据编辑器:
生成的子类:
预期的:
UPDATED:
It's tedious就我而言,因为每次我想重新生成子类,这意味着我还需要手动更新所有可选值。子类中有一个非可选(没有“?”)导致我在分配之前检查 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)
就我而言,我有很多属性需要手动标记为可选。
核心数据模型编辑器中的可选复选框在 Swift 及其可选选项引入之前就已存在。苹果公司在其声明中对此进行了说明核心数据编程指南 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html#//apple_ref/doc/uid/TP40001075-CH30-SW1:
您可以指定某个属性是可选的 - 也就是说,它不是
需要有一个值。但总的来说,你会感到沮丧
这样做——特别是对于数值(通常你可以得到
使用具有默认值的强制属性可以获得更好的结果 - 在
型号 — 0)。原因是SQL有特殊的比较
NULL 的行为与 Objective-C 的 nil 不同。数据库中的NULL
与 0 不同,搜索 0 将不会匹配包含以下内容的列
无效的。
因此,使用 Swift 和 Xcode 8,可选复选框(仍然)与您将属性定义为可选值或不在 ManagedObject 子类中这一事实无关。并且不要指望可选复选框会对您的NSManagedObject
子类属性在创建时可选类型Editor > 创建 NSManagedObject 子类.
也就是说,每次我需要一个属性在模型编辑器中选中其可选复选框时,我都会立即将其NSManagedObject
子类声明是可选的。
Addendum
发电机 https://github.com/rentzsch/mogenerator能够自动切换您的NSManagedObject
每次您在数据模型检查器中为每个实体的属性更改此选项并重建项目时,都会将子类属性从非可选更改为可选。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)