6

我想使用 OR 和两个字段来查询 CloudKit。但我找不到如何做到这一点的方法。我所做的是:

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"(creatorUserRecordID == %@)", userId];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"(toUser == %@)", userId];
NSCompoundPredicate *compPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Message" predicate:compPredicate];

但不幸的是 CKQuery 不支持 OR 查询(如文档中所写)我可以通过其他方式实现此效果吗?

4

1 回答 1

8

CKQuery 支持 AND 和 NOT,因此您可以想象您可以使用简单的布尔代数来创建基于 NOT(NOT A AND NOT B) == A OR B 的查询。但是,文档特别说明:

“在以下情况下不支持 NOT 复合运算符:

你不能用它来否定 AND 复合谓词。”

所以你必须分别查询每个 ORed 谓词,将它们分别保存为一个 SET,然后取两个集合的交集得到最终结果

于 2015-06-20T10:12:28.210 回答