首页 > 解决方案 > 如何在coredata ios中的获取请求谓词中放置默认值?

问题描述

我在 ios swift 中工作,在这里我使用核心数据来存储值并编写了一些函数来查找数据并返回它。

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 ?? ""
   }
}

在第一个代码中,它代表对象模型。在第二个代码中我面临错误。我收到错误,因为无法将类型字符串的值转换为预期的参数类型用户,即使我强制包装它,假设值不存在,应用程序会崩溃。如何在 fetch 操作中提供默认值。

标签: iosxcodecore-dataswift4swift5

解决方案


发生错误是因为first返回User与空字符串无关的 a 。

并将谓词附加到获取请求。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 ""
    }
}

推荐阅读