2012-02-26 11 views
3

親のすべての子エンティティを取得するにはどうすればよいですか?親のすべての子のNSFetchRequest

コアデータに親エンティティが設定されたテーブルがあります。ユーザーがセルに触れると、その親のすべての子を持つ別のテーブルを表示するつもりです。

NSFetchRequestはどうやってこのように見えますか?

編集:

モデルは、このようなものです:

学生>>日付[多くの1つ、一人の学生が持っている多くの日]

は、だから私はしたいすべての日付について(その生徒の生徒の表のセルに触れて選択した)任意の生徒を選択し、その生徒の日付を日付表に入力します。

ありがとうございます! >Studentstudentと呼ばれ、

Student *aStudent = ...; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: [NSEntityDescription entityForName: @"Date" inManagedObjectContext: [aStudent managedObjectContext]]]; 
[fetchRequest setPredicate: [NSPredicate predicateWithFormat: @"student == %@", aStudent]]; 
+0

モデルがなくても問題を理解するのは難しいです。いくつかの詳細を共有する。 –

+0

@Flex_追加、ありがとうございました編集 – MaKo

答えて

0

:それはあなたがフェッチ要求でそれを行うことができ、iOS4を上あなた順不同NSSetを取得し、またはだろう(私はここにそう何リリース/自動解放ARCを使用していない注意してください)特定の親プロパティを2番目のテーブルコントローラに注入します。例えば:

SecondController secondController = ... // alloc-init 
secondController.studentToGrab = ... 

SecondController宣言は以下のようにstudentToGrab性質を有する:

@property (nonatomic, retain) Student* studentToGrab; // use strong with ARC, if non-ARC remember to release it 

とそれを合成する定義です。あなたの第二のコントローラで次に

、あなたができるviewDidLoadメソッド内:あなたはまた、NSFetchedResultControllerクラスを使用することができ、テーブルを扱う

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourNameEntityForDate" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

[fetchRequest setFetchBatchSize:20]; 

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"student == %@", studentToGrab]; 
[fetchRequest setPredicate:predicate]; 

// you can also use a sortdescriptors to order dates... 

NSError *error = nil; 
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
if (error != nil) { 

    NSLog(@"Error: %@", [error localizedDescription]); 
    abort(); 
} 

// use resultArray to populate something... 

発言。テーブルにデータを表示するときに使用すると利点があります。

2

return [student dates])。あなたが触れたときに、あなたの最初のテーブルのデリゲート内

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Date" 
              inManagedObjectContext:moc]; 
[fetchRequest setEntity:entity]; 

NSMutableArray *predicates = [NSMutableArray arrayWithCapacity:3]; 
[predicates addObject:[NSPredicate predicateWithFormat:@"student == %@", aStudent]]; 

// You might add other predicates 
[fetchRequest setPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:predicates]]; 

// and if you want sorted results (why not, get the database to do it for you) 
// sort by date to the top 
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"dateAdded" ascending:NO]]; 
} 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSError *error = nil; 
NSArray *sorted = [moc executeFetchRequest:fetchRequest error:&error]; 
if (error) { 
    // Handle the error, do something useful 
} 

return sorted; 
+0

いい投稿をご覧ください。キーは逆の関係です。逆の関係がない場合は、フェッチ要求を使用するのがより困難になります。 –

0

カスタムクラスを持っている場合は、生成された関係を(トラバース可能性 - エンティティクラス名がStudentDateであり、Dateのための逆の関係があると仮定すると

1

このために別個のフェッチ要求を行う必要はありません。 student.datesのような、生徒オブジェクトからの関係にアクセスすることによって、多対多関係(オブジェクトを子エンティティと呼んでいない、誤解を招きやすく誤っている)のオブジェクトがすべて利用可能になります。これによりNSSetが得られます。必要に応じてソートして配列に変換することができます。

関連する問題