如何对 Cloudkit 条记录执行文本搜索?
How do I perform text search on Cloudkit records?
我有 Cloudkit 条记录,其“Keywords
”字段类型为“text
”
我可以使用此模式只获取所有记录的关键字字段
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Library", predicate: predicate)
var operation = CKQueryOperation(query: query)
operation.desiredKeys = ["KeyWords"]
operation.recordFetchedBlock = { [weak self] (record:CKRecord!) in
...
}
operation.queryCompletionBlock = { [weak self] (cursor:CKQueryCursor!, error:NSError!) in
...
}
self.publicDatabase!.addOperation(operation)
我想将返回的记录限制为 KeyWords 字段与搜索字符串匹配的记录,我认为这意味着提供合适的谓词。
documentation 表示 CONTAINS 仅适用于列表,除非您使用搜索所有文本字段的 self 关键字
但是,将谓词声明替换为:
let predicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchString)
结果
*** Terminating app due to uncaught exception 'CKException', reason: 'Predicate comparison options are not supported for expression: SELF CONTAINS[c]
并使用
let predicate = NSPredicate(format: "SELF CONTAINS %@", searchString)
结果
*** Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: SELF CONTAINS
我相信这很简单,但文档还不完整
您可以使用此谓词进行令牌搜索:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", tokens)
更新:
此功能似乎已更改。您现在可以使用:
NSPredicate(format: @"self contains %@", tokens)
或者这个:
NSPredicate(format: @"self contains 'bob' AND self contains ‘smith’”)
更多信息见:https://developer.apple.com/documentation/cloudkit/ckquery
我有 Cloudkit 条记录,其“Keywords
”字段类型为“text
”
我可以使用此模式只获取所有记录的关键字字段
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Library", predicate: predicate)
var operation = CKQueryOperation(query: query)
operation.desiredKeys = ["KeyWords"]
operation.recordFetchedBlock = { [weak self] (record:CKRecord!) in
...
}
operation.queryCompletionBlock = { [weak self] (cursor:CKQueryCursor!, error:NSError!) in
...
}
self.publicDatabase!.addOperation(operation)
我想将返回的记录限制为 KeyWords 字段与搜索字符串匹配的记录,我认为这意味着提供合适的谓词。
documentation 表示 CONTAINS 仅适用于列表,除非您使用搜索所有文本字段的 self 关键字
但是,将谓词声明替换为:
let predicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchString)
结果
*** Terminating app due to uncaught exception 'CKException', reason: 'Predicate comparison options are not supported for expression: SELF CONTAINS[c]
并使用
let predicate = NSPredicate(format: "SELF CONTAINS %@", searchString)
结果
*** Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: SELF CONTAINS
我相信这很简单,但文档还不完整
您可以使用此谓词进行令牌搜索:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", tokens)
更新: 此功能似乎已更改。您现在可以使用:
NSPredicate(format: @"self contains %@", tokens)
或者这个:
NSPredicate(format: @"self contains 'bob' AND self contains ‘smith’”)
更多信息见:https://developer.apple.com/documentation/cloudkit/ckquery