1

私は多対多の関係を持っているエンティティMyEntityを持っているので、のです。これはオプションなので、持っていないものもあります。これが私がやろうとしていることです:tagstagsNSSetMyEntityMyEntity'stags

 predicate= [NSPredicate predicateWithFormat:
 @"(rootId == parentId AND NONE tags.tagName == %@)", @"badTag"];

MyEntitysだから私はすべての場所を取得したいのでrootId == parentId、そのタグに.という名前のタグがある場合はエンティティを与えません"badTag"。これに伴う問題は、エンティティにタグがまったくない場合、そのエンティティが返されないことです。上記のバリエーションを試しました:

 @"(rootId == parentId AND ANY tags.tagName != %@)", @"badTag"];

しかし、これは同じ結果をもたらします。エンティティにタグがまったくない場合に、この述語を機能させるにはどうすればよいですか?

4

2 に答える 2

1

おそらく、を追加するOR COUNT(tags) == 0と、必要なものが得られますか?

これがSQLストアの場合は、CoreData SQLデバッグをオンにして、実際に実行されているものを確認してください。XCode4とコアデータ:SQLデバッグを有効にする方法

于 2012-05-23T12:41:36.020 に答える
1

これは、サブクエリ述語を使用して解決できます。サブクエリをマスターすると、非常に強力になります。悲しいことに、それらは十分に文書化されていません。

(rootId == parentId) AND (SUBQUERY(tag, $x, $x.tagName == %@).count() == 0)
于 2012-05-23T18:43:30.510 に答える