如何将 groupBy 与 MagicalRecord 一起使用?
Posted
技术标签:
【中文标题】如何将 groupBy 与 MagicalRecord 一起使用?【英文标题】:How to use groupBy with MagicalRecord? 【发布时间】:2013-09-05 03:55:24 【问题描述】:我被困在如何将 groupBy 与 MagicalRecord 一起使用。
我有一个国家/地区列表
Country -<< Venues
我需要按国家/地区对所有场所进行分组,并按名称对国家/地区进行排序。
但我不确定如何使用 MagicalRecord 执行此操作。
我尝试使用NSFetchedController
,但有时它会崩溃,说数组为 nil 或 0 长度。
其他时候,当有多个类别时,它只会看到 1 个类别。
最后,我不确定如何在实体上执行提取。
即;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
_objects = [NSMutableArray array];
self.fetchedResultsController = [self fetchedResultsController];
[Venue performFetch:self.fetchedResultsController];
// At this point how do I make the Venue findAllSortedBy work on the performFetch?
_objects = [NSMutableArray arrayWithArray:[Venue findAllSortedBy:@"name" ascending:YES inContext:[NSManagedObjectContext defaultContext]]];
self.title = @"Venues";
- (NSFetchedResultsController *)fetchedResultsController
if (!fetchedResultsController)
fetchedResultsController = [Venue fetchAllSortedBy:@"name"
ascending:YES
withPredicate:nil
groupBy:@"country"
delegate:self];
return fetchedResultsController;
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
NSLog(@"Section = %d", section);
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSLog(@"sectionInfo = %@", sectionInfo);
return @"Header";
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
[self configureCell:cell atIndexPath:indexPath];
return cell;
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
Venue *v = [_objects objectAtIndex:indexPath.row];
cell.textLabel.text = v.name;
我不确定我这样做是否正确。
上面会将所有内容放在1个国家/地区(当有多个时)并且日志会报告;
CoreData: error: (NSFetchedResultsController) A section返回了nil值 命名关键路径“国家”。对象将被放置在未命名的部分中
似乎没有看到不同的国家,我认为我没有正确执行 GroupBy 命令。
因此,我如何使用 MagicalRecord 执行 GroupBy 命令?
非常感谢。
【问题讨论】:
【参考方案1】:self.fetchedVenues = [Venue MR_fetchAllGroupedBy:@"country" withPredicate:nil sortedBy:@"name" ascending:YES];
【讨论】:
【参考方案2】:此错误告诉您,在您的所有 Venue 对象中,您的结果集中至少有一个没有“国家/地区”的值。您需要在获取之前验证您确实填写了该字段并正确保存。
仅供参考,在您的 viewDidLoad 方法中,您不需要所有代码。只需执行以下操作:
- (void) viewDidLoad;
[super viewDidLoad];
self.fetchedVenues = [Venue fetchAllSortedBy:@"name" ascending:YES withPredicate:nil groupBy:@"country" delegate:self];
fetchAllSortedBy... 将为您执行提取,并记录错误等。这就是 MagicalRecord 等辅助框架的意义所在。
【讨论】:
国家/地区关系未正确保存,但在您的帮助下,现在已保存。我不确定我是否打算做所有这些代码 - 但我很高兴得到纠正,因为我仍在学习 MagicalRecord以上是关于如何将 groupBy 与 MagicalRecord 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 groupby 和聚合将 pyspark 数据框中的行与多列连接起来
如何根据与该 groupby SUM 的 AVERAGE 进行比较的 groupby SUM 进行选择
如何将 CoreData SQLite 支持的持久存储克隆到“内存中”?