【发布时间】: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