swift - 使用 UUID 的 Swift 5 CoreData 谓词
问题描述
我有一个实体,我为其设置了一些 ID 作为 UUID 对象。我有这个功能来检查它是否已经记录在持久存储中。
我发现了一些不起作用的示例,因为该示例使用了一些NSPredicate(format: "%K == %@", #KeyPath(attribute), id)
无法在 swift 中快速运行的“”代码。
所以我试图弄清楚我如何迅速解决这个问题。我不希望将 UUID 存储为简单的字符串,因为 coreData 允许我们保存 UUID 对象。
我有这种方法,但它在 NSPredicate 行上崩溃:
static func isKnownBikeID(_ bleID: UUID) -> Bool {
let context = A18DataStore.shared.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Bike")
fetchRequest.predicate = NSPredicate(format: "%K == %@", [\Bike.bleID , bleID] as CVarArg)
do{
let bikes = try context.fetch(fetchRequest)
return bikes.count > 0
}
catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
return false
}
编辑:我的当前方法出现异常:
2021-07-16 11:55:28.390629-0400 A18 UAT[9260:4171027] -[Swift.__SwiftDeferredNSArray rangeOfString:]: unrecognized selector sent to instance 0x282c22cc0
解决方案
- 该
%K
格式需要一个关键路径字符串,这可以使用#keyPath
指令获得。 - 该格式需要一个 Objective-C 对象,在这里我们可以使用和
%@
之间的免费桥接。UUID
NSUUID
这给出了:
let predicate = NSPredicate(format: "%K == %@",
#keyPath(Bike.bleID), bleID as NSUUID)
推荐阅读
- python - 如何在python中检测句子的语言
- firebase - Flutter Firestore 错误:DocumentSnapshotPlatform 中不存在字段
- dart - dart CLI 命令 - 为什么没有 lib/proj.dart 文件?飞镖甜点
- leaflet - 在 Leaflet 中的路线上添加标签
- java - (java.nio.file.NoSuchFileException) 在我的代码中?
- python - 将 POST 请求从客户端发送到 Django 模型的最佳实践?
- javascript - SetTimeout 不同步时如何同步?
- python - 如何使用 f 字符串从多数组字典(Python)中获取信息?
- javascript - javascript html中带有if条件的Onclick事件
- itext - iText7单单元格在分页后分成两页