【问题标题】:CloudKit NSPredicate case insensitiveCloudKit NSPredicate 不区分大小写
【发布时间】:2015-10-13 15:34:03
【问题描述】:

我有一个云工具包查询,它使用下面的 NSPredicate 来搜索名称以用户在 UITextField 中输入的值开头的记录。我想让搜索不区分大小写,因此如果用户搜索“apple”,它将显示“Apple”和“apple”的结果。 我怎样才能做到这一点?我还尝试将查询更改为CONTAINS 而不是BEGINSWITH,但应用程序没有返回任何结果,因为它正在寻找数组中的值。是否可以查看字符串是否包含文本字段字符串? 谢谢

var p = NSPredicate(format: "name BEGINSWITH %@", titleLabel.text!)

【问题讨论】:

  • BEGINSWITH[c] ? “默认情况下,字符串比较区分大小写和变音符号。您可以使用方括号内的键字符 c 和 d 修改运算符,以分别指定不区分大小写和变音符号,例如 firstName BEGINSWITH[cd] $FIRST_NAME。”来自developer.apple.com/library/watchos/documentation/Cocoa/…(字符串比较部分)
  • 我应该把$FIRST_NAME放在哪里titleLabel.text!
  • "name BEGINSWITH[c] %@" 是你应该做的。
  • 当我添加它在NSPredicate 添加到CKQuery 的行上崩溃。这是行:let q = CKQuery(recordType: "Content", predicate: p)
  • 我认为您不能使用 CloudKit 谓词进行不区分大小写的搜索。 CloudKit 谓词仅使用 NSPredicate 可能的一个子集。您可以使用一种解决方法,在其中创建一个名为 nameSearch 的新字段并以小写形式复制那里的数据。然后您可以在该字段中进行小写搜索。

标签: ios swift nspredicate cloudkit


【解决方案1】:

根据CKQuerydocs

对于包含字符串值的字段,可以匹配开头 使用 BEGINSWITH 运算符的字符串的一部分,如 清单 4. 您不能使用其他字符串比较运算符,例如 包含或结束。使用此运算符时,该字段必须包含 一个字符串值,并且必须以您指定的字符串开头。 匹配 区分大小写。 在示例中,谓词匹配记录 其 favoriteColors 字段包含字符串 red、reddish 或 red 绿色胶带。

【讨论】:

  • BEGINSWITH 区分大小写是正确的。但是,您可以使用 NSPredicate(format: "self contains %@", NSString(string: name)) 对 self 进行查询,那么它不区分大小写。确保将其标记为在仪表板中进行查询等。
猜你喜欢
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2010-12-01
  • 2012-12-01
  • 2013-03-06
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多