NSFetchedResultsController:排序描述符和节

时间:2014-01-22 10:36:00

标签: ios objective-c uitableview core-data nsfetchedresultscontroller

我有一个像这样的核心数据模型......

[Country] <--->> [League] <--->> [Match]

我正在使用NSFetchedResultsControllerMatches显示为UITableView

我之前已经完成了这一百万次,但出于某种原因,这些部分出错了,我无法理解为什么。

我已经创建了类似的排序描述符......

NSSortDescriptor *countrySD = [NSSortDescriptor sortDescriptorWithKey:@"league.country.name" ascending:YES];
    NSSortDescriptor *leagueSD = [NSSortDescriptor sortDescriptorWithKey:@"league.name" ascending:YES];
    NSSortDescriptor *dateSD = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:YES];
    request.sortDescriptors = @[countrySD, leagueSD, dateSD];

首先,我想检查一下我是否按正确顺序排列。首先应按country.name排序,然后按league.name排序,然后按startDate排序。

  1. Albania中的任何内容都应该出现在Spain
  2. 之前
  3. 在一个国家/地区,League 1中的任何内容都应位于League 2之前的任何内容中。
  4. 在单个联赛中,所有比赛都应以最早的startDate顺序显示。
  5. 然后我用这个创建NSFRC ......

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.moc sectionNameKeyPath:@"league.leagueID" cacheName:nil];
    

    因此,这应该按不同league.leagueID值的匹配对表进行分组。

    它应该像......

    Albania - League 1
        12:00
        13:00
    Albania - League 2
        09:00
        14:00
    France - League 1
        09:00
    Spain - A League
        08:00
        12:00
    Spain - B League
        09:00
    

    虽然不行。我为同一个联盟获得了多个标题。有些匹配出现在错误的标题下......

    我已经检查了错误联赛中出现的比赛的值(NSLogged),他们确实拥有正确的联赛。因此即使他们有Spain - A League,他们也会出现在France - League A下(例如)。

    知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:17)

用作sectionNameKeyPath参数的密钥路径必须与使用的密钥相同 在第一个排序描述符中(或生成相同的相对排序)。

(据我所知)无法使用两个或更多排序描述符进行分组 将结果控制器的结果分成几部分。

相关问题