2012-03-13 14 views
1

私はコアデータNSManagedObjectクラスを自動生成しました。私がしようとしているのは、特定の人物のすべての電話番号を表示することです。私はテーブルを作成するために私のテーブルビュークラスにこれを表示しようとしています。コアデータNSSetの問題

Person to Numbersは1対多の関係であり、数字はaddNumbersObjectメソッドで行ったセットに含まれています。私はちょうどfetchresultscontrollerでこれをフェッチしてテーブルビューに表示する方法を理解していません。

現在、私はすべての人をフェッチしています。

アイデアや提案はありますか?

コアデータクラス:

@class Number 

@interface Person : NSManagedObject 

@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) NSSet *numbers; 

@end 

@interface Person (CoreDataGeneratedAccessors) 

- (void)addNumbersObject:(Number *)value; 
- (void)removeNumbersObject:(Number *)value; 
- (void)addNumbers:(NSSet *)values; 
- (void)removeNumbers:(NSSet *)values; 

@end 

表ビュークラス:

- (NSFetchedResultsController *)fetchedResultsController 
{  
    if (_fetchedResultsController != nil) 
     return _fetchedResultsController; 

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

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"]; 

    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

    [fetchRequest release]; 
    [theFetchedResultsController release]; 

    return _fetchedResultsController;  
} 

答えて

1

をごfetchRequest上の述語を使用してみてください。

すべての人の電話番号をすべて表示したい場合、またはそのフォーマットをどのようにしたいのかわかりませんが、これは1人の人数をすべて取得する方法です。あなたがそれを望むようにその人の電話番号を並べ替える

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Number" inManagedObjectContext:_context]; 

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"person.name == %@", personName]]; //Assuming person.name is unique 

:1つのテーブルビュー内の1人の特定の人のためにすべての電話番号を取得するには

+0

これはうまくいきません、person.name =%@ "、personNameについて説明できますか?personNameは利用できません。 ? – Vikings

+0

それで、上のコードでは、あなたが数字から欲しいPerson NSManagedObjectの名前を知っていると仮定しています。だから...新しいテーブルビューを開くために前のテーブルビューの人をタップしていたとしますあなたが選択した人には名前のプロパティがあります。それをpersonNameなどの次のテーブルビューに渡します。personNameの代わりにそれを使用します。 – theSpectre142

+0

番号NSManagedObjectは、Person NSManagedオブジェクトへの参照を戻す必要があります。そのため、人がどこに由来するかというようにpersonプロパティを持ち、.nameがPersonオブジェクトのプロパティです。 – theSpectre142

0

多くの方法がありますが、「人のためにすべての電話番号を表示する」可能性がある - 何について、具体的だと思いますあなたのテーブルに含まれるものとそれをどのように整理してほしいのか、あなたが探している答えを見つけ出すのが楽になるかもしれません。

一方、次のアプローチがあります。テーブルセクションを使用して人物を表し、それぞれの中の行を関連付けられたNumbersで表します。

  1. フェッチ要求のエンティティとして番号を設定します。
  2. "person.name"をソートキーとして設定します。 (各人のNumbersが適切な順序になるように、2番目のソート記述子を追加することもできます)。
  3. また、セクション名のキーパスとして "person.name"を設定します。
  4. はthuslyあなたのテーブルビューのデータソースの-tableView:titleForHeaderInSection:を実装します。

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 
        return [sectionInfo name]; 
    } 
    
+0

私は一人の人から電話番号を表示するだけです。だから、テーブルには電話番号がいっぱいだけど、同じ人の数字だけ – Vikings

関連する問題