如何在没有谓词的情况下创建CKQuery?

Ján*_*nos 21 nspredicate swift cloudkit ckquery

我需要查询所有记录类型,而不进行任何过滤.我试过两种方法:

let query = CKQuery(recordType: "Pm", predicate: nil)
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: ""))
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

'NSInvalidArgumentException',原因:'无法解析格式字符串""'

怎么做?

Mic*_*lum 35

你不能在没有谓词的情况下执行查询,但是NSPredicate确实有一个方法,而在Swift中它通过初始化器使用:

init(value: Bool) -> NSPredicate // return predicates that always evaluate to true/false
Run Code Online (Sandbox Code Playgroud)

用法如下.

let predicate = NSPredicate(value: true)
Run Code Online (Sandbox Code Playgroud)


zde*_*iny 20

要获取所有记录,您需要将其用作CKQuery的谓词:

[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]
Run Code Online (Sandbox Code Playgroud)

或者,在Swift中:

NSPredicate(format: "TRUEPREDICATE")
Run Code Online (Sandbox Code Playgroud)

这实际上就像没有任何谓词一样.

  • 这是Apple在文档中建议的解决方案.您的答案可能没有错,但考虑到2个解决方案,应该首选记录的解决方案 (3认同)
  • 这应该是接受的答案 (2认同)
  • 如果有人对此有任何问题,请注意:我必须在CloudKit仪表板中的Record的id字段上启用索引.我不知道为什么,但是当我这样做时,@"TRUEPREDICATE"格式开始起作用.我收到的错误说明:"字段'___ recordID'没有标记为可查询".这是我在这个问题上找到的Stack:http://stackoverflow.com/questions/29142717/field-recordid-is-not-marked-queryable. (2认同)