4

多対多の関係でフィルタリングするための述語を作成しようとしています。リレーションシップとして多くのラベルを持つMessageオブジェクトがあります。

私は次のことができます:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY labels.labelId == 4"];

そして、labelId4のLabelを持つメッセージのみを取得します。

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NONE labels.labelId == 4"];

これにより、labelId 4のLabelと関係がある場合でも、私が持っているすべての単一のMessageオブジェクトが得られます。これはなぜですか。誰か助けてもらえますか?

4

1 に答える 1

11

「NONE」または「NOTANY」は、CoreData述語で期待どおりに機能しないようです。両方の述語

 NONE labels.labelId == 4
 NOT (ANY labels.labelId == 4)

実際にはと同じ結果を返します

 ANY labels.labelId != 4

これは私がドキュメントを理解する方法ではありません。回避策として、SUBQUERYを使用できます。

[NSPredicate predicateWithFormat:@"SUBQUERY(labels, $x, $x.labelId == 4).@count == 0"]
于 2013-02-21T10:41:42.460 に答える