根据Apples类参考CKQuery
,运算符CONTAINS
是受支持的运算符之一。但是,这似乎不起作用。我有一个名为RecordType
的{{1}},以及一个字段名为myRecord
类型name
的记录。我尝试使用两个不同的谓词来获取记录,一个带有“==”运算符,另一个带有String
运算符。
CONTAINS
使用func getRecords() {
let name = "John"
let Predicate1 = NSPredicate(format: "name == %@",name)
let Predicate2 = NSPredicate(format: "name CONTAINS %@",name)
let sort = NSSortDescriptor(key: "Date", ascending: false)
let query = CKQuery(recordType: "myRecord", predicate: Predicate1)
// let query = CKQuery(recordType: "myRecord", predicate: Predicate2)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["name", "Date"]
operation.recordFetchedBlock = { (record) in
print(record["name"])
operation.queryCompletionBlock = { [unowned self] (cursor, error) in
dispatch_async(dispatch_get_main_queue()) {
if error == nil {
print ("sucess")
} else {
print("couldn't fetch record error:\(error?.localizedDescription)")
}
}
}
CKContainer.defaultContainer().publicCloudDatabase.addOperation(operation)
}
,输出为:
Predicate1
使用Optional(John)
sucess
,输出为:
Predicate2
同样使用couldn't fetch record error:Optional("Field \'name\' has a value type of STRING and cannot be queried using filter type LIST_CONTAINS")
忽略外壳会导致服务器问题。
如何正确使用运营商 [c]
?
修改
我现在仔细查看了文档,发现CONTAINS
只能与CONTAINS
一起使用。这意味着所有String字段都将用于搜索。是不是有更好的方法?
答案 0 :(得分:1)
这是一个例外,如下所述:
除了一个例外,CONTAINS运算符只能用于测试 列出会员资格例外情况是您使用它来执行全文 与自键路径一起搜索。自我关键路径 使服务器查找可搜索的基于字符串的字段 指定的标记字符串例如,@“self”的谓词字符串 包含'blue'“在标记为的所有字段中搜索单词”blue“ 包含在全文搜索中。您不能使用自键路径 在类型不是字符串的字段中搜索。
因此,您可以使用'self'代替'%K'来搜索字符串字段的子文本。