如何将默认值放入 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
}