如何将 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 进行选择

使用 groupby [Python] 时如何将值相乘

如何将 CoreData SQLite 支持的持久存储克隆到“内存中”?

如何在groupby期间将日期字符串转换为agg函数中的日期时间

如何在Python中连接两个groupby数据框?