6

2 つのフィールドで 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 複合述語を否定するために使用することはできません。」

そのため、OR された各述語を個別にクエリして、それぞれを SET として保存し、2 つのセットの共通部分を取得して最終結果を取得する必要があります。

于 2015-06-20T10:12:28.210 に答える