gpt4 book ai didi

swift - NSPredicate |在 Entity Fetch Request 上给出错误的异常 | swift 4

转载 作者:行者123 更新时间:2023-11-28 14:03:07 24 4
gpt4 key购买 nike

我尝试通过 CoreData 模型的 NSPredicate 获取实体。最初我使用它的 id 插入一个实体,现在打算获取它。然而,我的代码崩溃了,没有对我的 NSPredicate 做任何进一步的描述。我不知道为什么?我的 id 属性是 Int32:

        var employTime:EmployeeTime?
let context = getContext()
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "EmployeeTime")

//code crashes on this bottom line
let predicate = NSPredicate(format: "id == %@", id)
fetchRequest.predicate = predicate
let employTimes = try! context.fetch(fetchRequest) as? [EmployeeTime]
if (employTimes?.count)! > 0 {
for et in employTimes! {
if et.id == id {
employTime = et
}
}
} else {
employTime = EmployeeTime(context: context)
}
return employTime!

非常感谢任何帮助。

最佳答案

这是一个很常见的错误。

占位符 %@ 仅用于对象,对于 Int32 您需要 %d%i

let predicate = NSPredicate(format: "id == %d", id)

并使用具体的 NSManagedObject 子类创建获取请求

let fetchRequest = NSFetchRequest<EmployeeTime>(entityName: "EmployeeTime")

这避免了以后的类型转换。


您的整个代码都可以简化(不需要可选):

let employTime:EmployeeTime
let context = getContext()
let fetchRequest = NSFetchRequest<EmployeeTime>(entityName: "EmployeeTime")
let predicate = NSPredicate(format: "id == %d", id)
fetchRequest.predicate = predicate
let employTimes = try! context.fetch(fetchRequest)
if let et = employTimes.first {
employTime = et
} else {
employTime = EmployeeTime(context: context)
}
return employTime

但是你应该避免try!。使您的函数 throw 并将潜在的错误移交给调用者。

关于swift - NSPredicate |在 Entity Fetch Request 上给出错误的异常 | swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53332055/

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