Ios 在CoreData Swift中存储布尔值的正确方法
在我的Model.xcdatamodeld中,我将属性:notificationSet设置为布尔值。在我的模型中,我将其定义为@NSManaged var notificationSet:NSNumber?。当我想使用此属性保存某个项目时,我的使用方式如下:Ios 在CoreData Swift中存储布尔值的正确方法,ios,swift,core-data,Ios,Swift,Core Data,在我的Model.xcdatamodeld中,我将属性:notificationSet设置为布尔值。在我的模型中,我将其定义为@NSManaged var notificationSet:NSNumber?。当我想使用此属性保存某个项目时,我的使用方式如下: medicine.setValue(false, forKey: "notificationSet") 这是储存布尔人的正确方法吗?它将被存储为false?属性notificationSet包含一个布尔值,但由于类型指示它是一个NSNum
medicine.setValue(false, forKey: "notificationSet")
这是储存布尔人的正确方法吗?它将被存储为false?属性notificationSet包含一个布尔值,但由于类型指示它是一个NSNumber。将其设置为的值应为同一类型-NSNumber
这意味着您应该使用NSNumber上的numberWithBool方法来设置它。然而,斯威夫特是非常好的,并为您这样做。它会自动将布尔值连接到NSN编号。更多信息是的,您的KVC方法可以工作,但这是一种不好的做法。如果更改notificationSet的名称,则必须在整个项目中替换字符串。键入一个键值将很好地编译,并在运行时使应用程序崩溃 相反,请使用NSManagedObject子类。Xcode可以自动为您生成这些代码 另外,将布尔类型作为可选类型通常没有意义。相反,在模型编辑器中为其指定一个默认值,例如NO。然后,类型为NSNumber,而不是NSNumber false应该自动工作,但如果您希望显式,可以使用
medicine.notificationSet = NSNumber(bool: false)
在XCode 8中:
其工作原理是:
medicine.notificationSet=false