2012-03-08 7 views
4

私のモデルイベントに親エンティティがあります。そして2つの子エンティティ:誕生日、記念日。私は誕生日と記念日の親オブジェクトがイベントであるように、コアデータに組み込まれたエンティティ継承機能を使用しています。NSFetchedResultsControllerとエンティティの継承

だから私は、以下のものを使用してフェッチします:

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

// Set the batch size to a suitable number. 
[fetchRequest setFetchBatchSize:20]; 

// Edit the sort key as appropriate. 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; 

etc... 

今、私は、イベントの種類、誕生日や記念日でfetchedObjectsをソートしたいです。

どうすればよいですか?私は試しました:

for (Birthday *birthday in _fetchedResultsController.fetchedObjects){ 
    [birthdayObjects addObject:birthday]; 
} 
for (Anniversary *anniversary in _fetchedResultsController.fetchedObjects){ 
    [anniversaryObjects addObject:anniversary]; 
} 

しかし、これはちょうどfetchedObjectsのすべてのオブジェクトを各配列に追加します。

これは間違った方法ですか?

UPDATE

は、この使用してそれを考え出し:

for (Event *event in _fetchedResultsController.fetchedObjects){ 
    if ([event isKindOfClass:[Birthday class]]){ 
     [birthdayObjects addObject:event]; 
    }else{ 
     [anniversary addObject:event]; 
    } 
} 

をしかし、私はそれを開いています良い方法があれば!ありがとう。

+0

@ "class"の別の並べ替え記述子を追加すると動作します – govi

+0

@ "class"キーパスが見つかりません – tofortier

+0

[obj valueForKey:@ "class"]は私に適切なクラス名を与えます。うーん....私はすぐにあなたの状態ができるプロジェクトを持っていない。 – govi

答えて

0

Eventには、eventTypeなどと呼ばれる読み取り専用プロパティがあり、文字列を返します。イベントクラスは1つの文字列を返し、子イベントはBirthday、Anniversaryなど将来のイベントタイプのために何かを返します。

フェッチされた結果コントローラでは、eventTypeをセクション名のキーパスとして設定することができます。これにより、タイプをセクションに分割します。このような一時的なプロパティは、フェッチ要求の一部としてそれらを使用します。

上記の状況では、イベントタイプを述部またはソート記述子として使用して、フェッチ要求から戻ってくるすべてのイベントの配列を処理します。

文字列が気に入らない場合は、列挙型を使用できます。フェッチ要求でイベントタイプを使用する場合は、Eventクラスの属性にしてawakeFromInsertで適切に設定します。

+0

このパフォーマンスは悪いですか?私はソートやセクション記述子を提供する際に学んだが、そのためにストアド属性を使う方が良い。しかし、私はこの場合どのようにそれを行うか分からない。 – fabb