CloudKit复合查询(OR查询)

CloudKit compound query (query with OR)

我想使用 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 查询(如文档中所写)我可以通过其他方式实现这种效果吗?

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

"在下列情况下不支持 NOT 复合运算符:

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

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