2

私は3つのエンティティA、B、Cを持っています.

それらの関係は、A <-->>B、B<-->C です。

A には「タイプ」という属性があります。

AとBの関係はa2b、BとCの関係はb2cです。c_array は C オブジェクトのリストです。

私がやろうとしているのは、NSPredicate を使用して A を C と A の属性「タイプ」でフィルタリングすることです。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSMutableArray *parr = [NSMutableArray array];

for (C *c in c_array) {
  [parr addObject:[NSPredicate predicateWithFormat:@"ANY a2b.b2c = %@", c]];
}

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSCompoundPredicate orPredicateWithSubpredicates:parr], [NSPredicate predicateWithFormat:@"type = %i", 0], nil]];

[fetchRequest setPredicate:predicate];

しかし、私が得たものは私が期待したものではありません。というわけで、他にも試してみました。

predicate = [NSPredicate predicateWithFormat:@"type=%i AND (0!=SUBQUERY(a2b,$a2b,$a2b.b2c IN %@).@count)", 0, c_array];

またまた予想外の結果に!誰か助けてくれませんか?TT

4

1 に答える 1

0

逆にやりたいようですね。あなたはすでにCを持っており、あなたが説明した関係に基づいて、CクラスにはBプロパティがあり、BクラスにはAプロパティがあります。したがって、使用したことがあり、次のようなものが機能するc2bと仮定します。b2a

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"c2b.b2a.type == %@",[NSNumber numberWithInt:0]];

NSArray *result = [c_array filteredArrayUsingPredicate:predicate];

typeまた、述語の属性をAintと比較していることにも気付きました。i が 0 の場所を探すだけでtype==%i、 に値がないすべてのオブジェクトが返されtypeます。したがって、オブジェクトまたはintと比較typeします。NSNumbertype.intValue

于 2012-10-12T18:31:34.287 に答える