Pas*_*lac 8 uuid core-data nspredicate swift
我有一个实体,我将一些 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
}
Run Code Online (Sandbox Code Playgroud)
编辑:我当前的方法遇到异常:
2021-07-16 11:55:28.390629-0400 A18 UAT[9260:4171027] -[Swift.__SwiftDeferredNSArray rangeOfString:]: unrecognized selector sent to instance 0x282c22cc0
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 16
%K格式需要一个关键路径字符串,这可以使用指令获取#keyPath。%@之间的免费桥接。UUIDNSUUID这给出:
let predicate = NSPredicate(format: "%K == %@",
#keyPath(Bike.bleID), bleID as NSUUID)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2219 次 |
| 最近记录: |