ios - 如何对 Cloudkit 记录执行文本搜索?

标签 ios swift cloudkit

我的 Cloudkit 记录中有一个类型为“text”的“Keywords”字段

我可以使用这个模式来获取所有记录的关键字字段

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

关于ios - 如何对 Cloudkit 记录执行文本搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31459326/

相关文章:

ios - 如何从 CloudKit CKRecord 获取 CoreData NSManagedObject?

ios - Apple Metal MPSImage 内存布局

ios - 如何在 iOS 中创建像真正的键盘一样的自定义键盘?

ios - 删除当前 View 并使用分段 Controller 添加另一个 View

swift - 如何更改CAShapeLayer内的区域?

ios - 在 Swift 的警报中使用自定义 View

ios - Objective-C 尝试为 NSArray 中的每个项目创建标签 - 不起作用

ios - AFNetworking 3.0 在应用移至后台时继续上传

javascript - Cloudkit JS - 由创建记录的用户查询记录

ios - 获取与 CloudKit 查询匹配的记录数