0

namecolor の2つの属性を持つCarというエンティティがあります。

データベースにいくつかの車があります。

名前:ホンダ シビック

カラー:ブルー

名前:VWゴルフ

カラー:ブルー

名前:ルノー・トゥインゴ

カラー:レッド

名前:シボレーカマロ

カラー:ホワイト

次に、各色の車が何台あるかを数え、その結果を UITableView に入れる必要があります。

したがって、たとえば、TableView には次のようになります。

ブルー (2)

赤 (1)

ホワイト (1)

約 70 種類の色があると想像してください。

多くの Web サイトや Core Data の書籍を検索しましたが、これが可能かどうかはまだわかりません。

出来ますか?可能であれば、どのように行うのですか?

4

2 に答える 2

1

これらは単純なフェッチです。実際、NSFetchedResultsController を使用して、セクション名として「color」を設定すると、すべてのオブジェクトの配列が返され、色別にグループ化されます。

何かのようなもの...

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Car"];    
NSSortDescriptor *sectionSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:YES];
NSSortDescriptor *nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sectionSortDescriptor, nameSortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"color" cacheName:@"CarCache"];
fetchedResultsController.delegate = self;
self.fetchedResultsController = fetchedResultsController;

NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
    // Handle error...
}

これで、データがセクションに分割され、色ごとに 1 つのセクションが作成され、そこに含まれる値が名前で並べ替えられます。データを取得するには、FRC のセクション プロパティを確認します。

于 2012-05-08T20:01:41.917 に答える
0

前の答えは完全に正しくないと思います。フェッチされた結果コントローラーでは、通常のことを行いますが、

  • エンティティをフェッチしますColor
  • 並べ替えますname(これが色の名前になります)

cellForRowAtIndexPath:表示する適切な文字列を作成します。

Color *color = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat:@"%@ (%d)", 
   color.name, color.cars.count];

ここcarsで、は色から車への逆の関係の名前です。

于 2012-05-08T20:20:24.607 に答える