Cloudkit 的 NSPredicate 匹配字符串

JDM*_*JDM 2 ios swift cloudkit

我需要从与字符串匹配的 cloudkit 中提取记录。

我有一个用户记录类型,带有一个电子邮件字段。我在同一封电子邮件中有多个记录,但我无法通过谓词来获取这些记录。

我已经尝试了所有这些:

let predicate = NSPredicate(format: "email = 'julio_ukohgsp_chevez@tfbnw.net'")
NSPredicate(format: "email == %@", argumentArray: [email])
NSPredicate(format: "email IN %@", [email])
NSPredicate(format: "email contains %@", email)
NSPredicate(format: "email = %@", email)
NSPredicate(format: "email == %@", email)
Run Code Online (Sandbox Code Playgroud)

我的查询指定了记录类型:

let query = CKQuery(recordType: "User", predicate: NSPredicate(format: "email == %@", email))
Run Code Online (Sandbox Code Playgroud)

当我使用 value: true 执行谓词时,我会得到所有记录,包括我想要的记录。

我错过了什么?

编辑 ..

let query = CKQuery(recordType: "User", predicate: NSPredicate(format: "email BEGINSWITH %@", email))
Run Code Online (Sandbox Code Playgroud)

确实有效并带回记录,但我想要精确匹配!

小智 7

我遇到了同样的问题,并且能够通过在我的情况下在用户字段上添加 Queryable 索引来解决它。请注意,添加索引后,我需要再次将数据写入 CloudKit 才能执行查询。

创建谓词的代码:

let user = "test-user"
let userPredicate = NSPredicate(format: "user == %@", user)
Run Code Online (Sandbox Code Playgroud)