0

我有一个名为Car的实体,它有2 个属性namecolor

我在数据库中有几辆车:

名称:本田思域

颜色: 蓝色

名称:大众高尔夫

颜色: 蓝色

名称:雷诺Twingo

颜色:红色

名称:雪佛兰科迈罗

颜色: 白色

现在我需要计算每种颜色有多少辆车,然后将结果放在 UITableView 中。

因此,例如,在 TableView 中会有:

蓝色 (2)

红色 (1)

白色 (1)

想象一下,大约有 70 种不同的颜色。

我搜索了许多Core Data的网站和书籍,但我仍然不知道这是否可能。

是否可以?如果可能,该怎么做?

4

2 回答 2

1

这些是简单的提取。实际上,您可以使用 NSFetchedResultsController,并将“颜色”设置为部分名称,它会返回给您一个包含所有对象的数组,并且它们将按颜色分组。

就像是...

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...
}

现在,您的数据将被分成多个部分,每种颜色一个部分,其中的值按名称排序。要获取数据,只需查看 FRC 的sections 属性。

于 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 回答