gpt4 book ai didi

ios - 我正在使用核心数据,我的 bool 值被读取为数字

转载 作者:行者123 更新时间:2023-11-28 12:28:49 27 4
gpt4 key购买 nike

我正在使用核心数据,当我尝试读取我的属性时,它们被读取为数字,例如 0 和 1。这是我的核心数据设置。我的最终目标是将 bool 值保存为 true 或 false,然后按原样读取。我是在我的设置中做错了什么,还是遗漏了什么?我看过那个帖子 iPhone: Save boolean into Core Data除了在 OBJ C 中,我相信 bool 值现在可以在 Datamodel 选项中使用。

 func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){
let context = getContext()

let entity = NSEntityDescription.entity(forEntityName: "FilterCoreDataObj", in: context)
let transc = NSManagedObject(entity: entity!, insertInto: context)

//SET ENTITY VALUES

transc.setValue(bathAny, forKey: "bathAny")
transc.setValue(bath1, forKey: "bath1")
transc.setValue(bath2, forKey: "bath2")
transc.setValue(bath3, forKey: "bath3")
transc.setValue(bath4, forKey: "bath4")


do {
try context.save()
print("saved")
} catch let error as NSError {
print("could not save \(error), \(error.userInfo)")
} catch {

}
}

读取函数

  func getTranscriptions(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool) {
let fetchRequest: NSFetchRequest<FilterCoreDataObj> = FilterCoreDataObj.fetchRequest()

do {
let searchResults = try getContext().fetch(fetchRequest)
print("num of results = \(searchResults.count)")
for trans in searchResults {
print("bath 1 \(trans.value(forKey: "bath1"))")


}


} catch {
print("Error with request: \(error)")
}

}

最佳答案

如果您选择一个属性,然后打开“数据模型检查器”选项卡,有一个“使用标量类型”选项,允许您直接使用 Bool 类型而不是底层 NSNumber 值。

enter image description here

我可以确认在 Swift 3 中(使用自动生成的托管对象子类)这是开箱即用的。

如果您创建自己的 NSManagedObject 子类(或扩展),那么您将需要公开该属性。

附注作为旁注,我猜你的项目目前没有对你的 NSManagedObjects 使用任何子类或扩展。如果您是 CoreData 的新手,这可能是一个令人困惑的话题,因为 CoreData 工具在 Xcode 8 中发生了巨大变化。

作为一个简短的介绍,您可以为您的实体手动创建一个子类(或扩展)(或者我的偏好 - 让 Xcode 自动为您生成它们)。

在您的情况下,扩展将如下所示:

extension FilterCoreDataObj {
@NSManaged public var bathAny: Bool
@NSManaged public var bath1: Bool
@NSManaged public var bath2: Bool
@NSManaged public var bath3: Bool
@NSManaged public var bath4: Bool
}

然后使用实体变得容易得多,因为您可以直接访问属性而不是使用字符串作为关键路径:

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){

let context = getContext()

let transc = FilterCoreDataObj(context: context)
//SET ENTITY VALUES

transc.bathAny = bathAny
transc.bath1 = bath1
transc.bath2 = bath2
transc.bath3 = bath3
transc.bath4 = bath4

do {
try context.save()
print("saved")
} catch let error as NSError {
print("could not save \(error), \(error.userInfo)")
} catch {

}
}

关于ios - 我正在使用核心数据,我的 bool 值被读取为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com