1

のような多対多の関係を持つデータモデルがありますEntityA <-->> EntityB <<--> EntityCEntityA以前はさまざまな検索条件でクエリを実行しNSCompoundPredicate、の配列で使用していましたNSPredicateEntityA述語の1つで、を使用してクエリを実行したかったEntityC。以下を使ってみましたSUBQUERYが、うまくいきませんでした。

searchPredicate=[NSPredicate predicateWithFormat:@"(0 != SUBQUERY(EntityB, $B, (0 != SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@).@count)).@count)", name]

そして、私は次の例外を受け取りました、

キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:
「非コレクションオブジェクトでコレクション評価を実行できません。」

足りないものはありますか?助けていただければ幸いです。

サラ

4

1 に答える 1

3

(私はあなたの述語を困惑させるのに多くの問題を抱えていたので、これを一粒の塩と一緒に取ってください。)

これは非常に複雑だと思います。キーパスを使用して単純化する必要があります。各EntityBはEntityCと1対1の関係にあるため、EntityBオブジェクトを検索するには、チェックするだけですEntityB.entityCRelationshipName.entityCAttribute。だから次のようなもの:

ALL B.EntityC.name like %@

いずれにせよ、(述語を正しく読んでいる場合)これは:

SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@)

コレクションではなく、単一のオブジェクトのみを返すことができます。したがって、述部はそれに対してカウントを実行できません。それがあなたのエラーメッセージの意味です。

データモデルエディタの述語エディタを使用して、保存する前に述語をハッシュ化することをお勧めします。

于 2010-05-12T21:36:33.010 に答える