【问题标题】:NSFetchedResultsController: sort descriptors and sectionsNSFetchedResultsController:排序描述符和部分
【发布时间】:2014-02-12 08:45:13
【问题描述】:

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

[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. 在一个国家/地区,League 1 中的任何内容都应该排在 League 2 中的任何内容之前。
  3. 在一个联赛中,所有的比赛都应该以startDate的顺序显示,最早的在前。

然后我用这个创建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下(例如)。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。将不得不求助于获取请求并设置我自己的上下文观察器:(
    • @Fogmeister:或者,您可以添加一个包含&lt;country&gt;.&lt;league&gt; 的附加属性并将其用作部分键和第一个排序描述符。
    • 哦,这听起来像是一个计划。我会把它放在联赛课上吗?
    • 是的!是的!是的!谢谢!完美运行!希望我能给你另一个 +1。
    • 你摇滚! 4 个小时以来,我一直在寻找我的应用程序出了什么问题,就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多