Core Data属性计数并在TableView中显示结果

时间:2012-05-08 10:11:16

标签: ios core-data ios5 count nsfetchrequest

我有一个名为 Car 的实体, 2个属性名称颜色

我在数据库中有几辆汽车:

  

名称:Honda Civic

     

颜色:蓝色

     

名称:大众高尔夫

     

颜色:蓝色

     

名称:雷诺Twingo

     

颜色:红色

     

名称:雪佛兰Camaro

     

颜色:白色

现在我需要计算每种颜色的车数,然后将结果放在UITableView中。

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

  

蓝色(2)

     

红色(1)

     

怀特(1)

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

我搜索了许多核心数据的网站和书籍,但我仍然不知道这是否可行。

有可能吗?如果可能的话,怎么做?

2 个答案:

答案 0 :(得分: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...
}

现在,您的数据将分为几个部分,每种颜色一个部分,以及按名称排序的值。要获取数据,只需查看FRC的sections属性。

答案 1 :(得分:0)

我认为之前的答案并不完全正确。在你的获取结果控制器中,你可以做通常的事情,但

  • 您获取实体Color
  • name排序(这将是颜色的名称)

cellForRowAtIndexPath:中构建要显示的相应字符串。

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

其中cars是从颜色到汽车的反向关系的名称。