Cloudkit 返回具有特定字符串的记录

Posted

技术标签:

【中文标题】Cloudkit 返回具有特定字符串的记录【英文标题】:Cloudkit returning records with a specific string 【发布时间】:2016-04-17 15:37:17 【问题描述】:

在我的项目中,使用 CloudKit 记录类型“用户”(我也使用其他记录类型名称进行了测试),我创建了一个带有电子邮件字段的记录。

我正在尝试准确匹配该电子邮件并获取匹配的记录。我使用 IN 或 == 谓词(用于单个或电子邮件列表)来执行此操作。

let query = CKQuery(recordType: "User", predicate: NSPredicate(format: "email IN %@", emails))
let query = CKQuery(recordType: "User", predicate: NSPredicate(format: "email == %@", "julio_ukohgsp_chevez@tfbnw.net"))

我遇到问题的电子邮件是“julio_ukohgsp_chevez@tfbnw.net”,任何使用此电子邮件检索记录的尝试都会返回 0,但是如果我将其更改为“julio_ukohgsp_chevez@tfbnw.ne”,它将检索到 OK。

最初我认为是特殊字符,但其他字符串可以正常工作。然后我假设长度,但其他更长的字符串工作正常。

还有其他人有这个问题吗?我很难信任 CloudKit,但不明白为什么它不能匹配这个字符串。

我问了一个类似的问题,但在我获得详细信息之前,用户能够对此进行测试并得到与此字符串相同的结果。这篇文章更加简洁,并且有重新创建的步骤。

【问题讨论】:

你是说如果你把谓词改成"email == %@", "julio_ukohgsp_chevez@tfbnw.ne"(不是t),那么你会得到预期的结果吗?如果是这样,那么您真的确定数据库中的值实际上不是julio_ukohgsp_chevez@tfbnw.ne 是的,我 100% 确定。这很奇怪。我检查了很多次并手动输入。我可以尝试您的特定字符串,但即使替换任何 1 个字符也有效。 我也有同样的问题。你有什么发现吗? 是的!我开始使用转义符和 Unicode 字符编号对电子邮件字符串进行编码。如果我显示它们,我只需要先解码它们。信用:disqus.com/home/discussion/hackingwithswift/… 【参考方案1】:

试试这个:

let predicateString = "email IN '\(emails)'"
let predicate = NSPredicate(format: predicateString)

【讨论】:

以上是关于Cloudkit 返回具有特定字符串的记录的主要内容,如果未能解决你的问题,请参考以下文章

每天从特定记录类型中删除所有记录 CloudKit

Cloudkit 的 NSPredicate 匹配字符串

我如何通过其记录名称查询 CloudKit 以获取特定记录?

关于 CloudKit 的一些问题

UITableView 单元格未填充 CloudKit 数据

CloudKit 字节到字符串数组