【问题标题】:NSFetchResultsController with sectionsNameKeyPath and order of resultsNSFetchedResultsController 带有部分名称 KeyPath 和结果顺序
【发布时间】:2013-08-30 09:06:16
【问题描述】:

我在使用 NSFetchResultsController 时遇到了一些问题,正在寻求帮助。

我的 CoreData 实体 FunCentre 具有以下属性 name、latitude、longitude、country、postcode 和 favourite。当用户在 tableview 中选择一行时,它将 favourite 属性设置为 1,再次点击时将其设置回 0。这一切正常,因为我检查了 sqlite 文件并且更改正确发生。

我想使用部分来分隔收藏的行和不收藏的行。我希望收藏夹列在第一部分的表格视图顶部,而列表的其余部分列在第二部分。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"favourite"
         cacheName:nil];

上面的代码在应用程序中并更改收藏夹时有效,但是当我关闭应用程序并重新启动它时,收藏夹没有分组,只是按字母顺序显示在主列表中,它仍然会放入正确的行数最喜欢的部分。

SQL 调试结果

CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCOUNTRY, t0.ZFAVOURITE, t0.ZLATITUDE,  t0.ZLONGITUDE, t0.ZNAME, t0.ZPOSTCODE FROM ZFUNCENTRE t0 ORDER BY t0.ZNAME

CoreData: annotation: sql connection fetch time: 0.0051s

CoreData: annotation: total fetch execution time: 0.0106s for 34 rows.

CoreData: sql: SELECT t0.ZFAVOURITE, COUNT (DISTINCT  t0.Z_PK) FROM ZFUNCENTRE t0 GROUP BY  t0.ZFAVOURITE ORDER BY t0.ZFAVOURITE

谁能告诉我为什么分组在重新启动时不起作用?以及如何更改分组的顺序?因为收藏夹出现在底部,我希望它们在顶部。

提前致谢

【问题讨论】:

    标签: iphone ios uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

    使用sectionNameKeyPath时,必须使用相同的键添加排序描述符(或至少生成相同的相对排序):

    NSSortDescriptor *sort1 = [[NSSortDescriptor alloc] initWithKey:@"favourite" ascending:YES];
    NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    

    【讨论】:

    • 感谢 Martin,这解决了订单启动时的问题。如何更改部分顺序?我想要顶部的收藏夹和下面的列表的其余部分,它目前是相反的。
    • @MattPrice:将 ascending:YES 更改为 ascending:NO :-)
    • 完美.. 非常感谢您的快速回复和出色的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多