1

mode = 0で、group=0の登録のモードを持つすべてのグループを返す単純な述語が必要です。

正確には、ネストされたオブジェクトのプロパティにアクセスするための述語が必要です。どういうわけか次のような述語:

[NSPredicate predicateWithFormat:@"mode = 0 AND enrollments.Enrollment.mode = 0"]

上記の述語は間違っており、明らかに機能しません。

編集:

私も次の述語に行きましたが、失敗しました。

[NSPredicate predicateWithFormat:@"mode = 0 AND ALL ( SUBQUERY(enrollments,$varEnrollment,$varEnrollment.mode = 0))"]

アクティブなすべてのグループ(group.mode = 0)とアクティブなすべての登録者(enrolles.mode = 0)を含む結果が必要ですが、私にとってこの述語は機能しません。

4

1 に答える 1

6

あなたの質問とコメントから私あなたが欲しいと思います

[NSPredicate predicateWithFormat:@"mode = 0 AND (ALL enrollments.mode = 0)"]

アップデート

ALL集計が機能していないようです。投げる

'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'

@yunasが気づいたように。これは以前にも気づかれていました。

一方、ANY集計は問題なく機能します。したがって、回避策として、 ALLを同等のANY式に置き換えることができます。

[NSPredicate predicateWithFormat:@"mode = 0 AND NOT(ANY enrollments.mode != 0)"];

そして、これは実際に機能します(私はそれをテストしました)!

更新2

議論の中で、yunasはmode = 0のグループごとに1行のテーブルを表示し、テーブル行内にmode=0のそのグループのすべての登録を表示することを望んでいることが明らかになりました。

最初の解決策(おそらくより良いもの):最初に上記の方法ですべての許容可能なグループを見つけます。(の)行ごとcellForRowAtIndexPath:に、そのグループの登録をフィルタリングし、セルを描画します。

2番目の解決策:すべての登録を取得し、グループで並べ替えます。これにはフェッチ要求が1つだけ必要ですが、結果はテーブルビューのデータソースほど適切ではありません。フェッチ要求は次のようになります。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Enrollment"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mode = 0 AND group.mode = 0"];
request.predicate = predicate;
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"group.name" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"share" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];
于 2012-08-13T13:24:44.283 に答える