如何将默认值放入 coredata ios 的获取请求谓词中?
how to put default value in fetch request predicate in coredata ios?
我在 ios swift 工作,在这里我使用核心数据存储值并编写了一些函数来查找数据和 return 它。
public func insertdetails (id:String, data:String, createdAt:String){
do{
try self.userdetails.operation { (context, save) throws -> Void in
let model : User = try! context.create()
model.id = id
model.details = data
model.createdat = createdAt
save()
}
}
}
public func fetchdetails (Id:String) -> String{
do {
let predicate: NSPredicate = NSPredicate(format: "id == %@", Id)
let record: User = try! self.userdetails.fetch(FetchRequest<User>().filtered(with: predicate)).first ?? "" // **here im getting error**
return record.details ?? ""
}
}
在第一个代码中它表示对象模型。
在第二个代码中,我面临错误。
我收到错误消息,因为 connot convert convert value of type string to expected argument type User,即使我强制包装它,假设值不存在,应用程序也会崩溃。如何在获取操作中提供默认值。
错误发生是因为first
returns一个与空字符串无关的User
。
并将谓词附加到获取请求。 Core Data 代表您过滤记录。
public func fetchdetails (Id:String) -> String{
do {
let fetchRequest : FetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", Id)
return try self.userdetails.fetch(fetchRequest).first?.details ?? ""
}
} catch {
print(error)
return ""
}
}
您的提取请求将 return 一个 User
对象数组,但您在 then nil 合并运算符的右侧有一个字符串;这就是你出错的原因。
您不能使用字符串替代 User
。您可能不想在这里使用 nil 合并运算符。只处理可选的。
如果函数本身 return 是一个可选字符串可能会更好。 Swift 可选值旨在替换标记值,例如您在此处使用的空字符串。
public func fetchDetails (id:String) -> String? {
let fetchRequest : FetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
do {
if let record = try self.userdetails.fetch(FetchRequest<User>().first {
return record.details
}
} catch {
print("fetch error - \(error)")
}
return nil
}
我在 ios swift 工作,在这里我使用核心数据存储值并编写了一些函数来查找数据和 return 它。
public func insertdetails (id:String, data:String, createdAt:String){
do{
try self.userdetails.operation { (context, save) throws -> Void in
let model : User = try! context.create()
model.id = id
model.details = data
model.createdat = createdAt
save()
}
}
}
public func fetchdetails (Id:String) -> String{
do {
let predicate: NSPredicate = NSPredicate(format: "id == %@", Id)
let record: User = try! self.userdetails.fetch(FetchRequest<User>().filtered(with: predicate)).first ?? "" // **here im getting error**
return record.details ?? ""
}
}
在第一个代码中它表示对象模型。 在第二个代码中,我面临错误。 我收到错误消息,因为 connot convert convert value of type string to expected argument type User,即使我强制包装它,假设值不存在,应用程序也会崩溃。如何在获取操作中提供默认值。
错误发生是因为first
returns一个与空字符串无关的User
。
并将谓词附加到获取请求。 Core Data 代表您过滤记录。
public func fetchdetails (Id:String) -> String{
do {
let fetchRequest : FetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", Id)
return try self.userdetails.fetch(fetchRequest).first?.details ?? ""
}
} catch {
print(error)
return ""
}
}
您的提取请求将 return 一个 User
对象数组,但您在 then nil 合并运算符的右侧有一个字符串;这就是你出错的原因。
您不能使用字符串替代 User
。您可能不想在这里使用 nil 合并运算符。只处理可选的。
如果函数本身 return 是一个可选字符串可能会更好。 Swift 可选值旨在替换标记值,例如您在此处使用的空字符串。
public func fetchDetails (id:String) -> String? {
let fetchRequest : FetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
do {
if let record = try self.userdetails.fetch(FetchRequest<User>().first {
return record.details
}
} catch {
print("fetch error - \(error)")
}
return nil
}