ios - 如何在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 操作中提供默认值。
解决方案
发生错误是因为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 ""
}
}
推荐阅读
- python - 有人可以解释为什么这会导致索引超出范围错误吗?
- emacs - 在新安装的 spacemacs 中安装软件包时出错
- python - While 循环不适用于分配给循环外另一个变量的变量
- java - 当 io.netty.channel.ExtendedClosedChannelException] for... 但 ServerHttpResponse 已经提交(200 OK)可能发生?
- javascript - 调用带参数的构造函数
- mysql - 具有唯一约束和条件的插入(MySQL)
- testing - 在赛普拉斯的某个元素中查找多个元素
- javascript - discord.js 随机视频机器人将令牌添加到视频名称的末尾
- wpf - .NET Core WPF 桌面桥 - 桌面快捷方式/任务栏快捷方式绕过检查更新
- json - 如何在 where 子句中解析 JSON (SQL Server)