Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在CoreData Swift中存储布尔值的正确方法_Ios_Swift_Core Data - Fatal编程技术网

Ios 在CoreData Swift中存储布尔值的正确方法

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

在我的Model.xcdatamodeld中,我将属性:notificationSet设置为布尔值。在我的模型中,我将其定义为@NSManaged var notificationSet:NSNumber?。当我想使用此属性保存某个项目时,我的使用方式如下:

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