gpt4 book ai didi

iphone - NSFetchedResultsController 对不同的部分进行不同的排序(升序/降序)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:15 27 4
gpt4 key购买 nike

在我的应用程序中,我有一个任务列表(不,它不仅仅是另一个待办事项应用程序),我使用 NSFetchedResultsControllerUITableView 中显示任务。这是相关的初始化代码:

NSSortDescriptor *dueDateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"due" YES];
NSSortDescriptor *completionSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"completed" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:completionSortDescriptor, dueDateSortDescriptor, nil]];

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"completed" cacheName:nil];

它所做的是对任务进行排序,以便我在顶部有一个未完成的任务部分,按最先到期的任务排序,然后再向下排序。这一切都有效。

但是,这意味着第二部分(已完成任务的部分)也按此方式排序,因此最早到期的任务排在最前面。我想要做的是更改它,以便第二部分以相反的方式排序(按降序排列),但第一部分保持按升序排序。这可能吗?我该怎么做?

我为什么要这样做:按照目前的工作方式,第二部分顶部的任务(因此也是最明显的)是很久以前完成的任务。用户更有可能希望看到最近完成的任务(如果不小心选中,则取消选中),并且可以推测具有较新截止日期的任务是最近完成的。如有必要,我很乐意向 Core Data 任务对象添加一个单独的完成日期字段(这还不是运输应用程序,所以我可以随心所欲地更改数据格式)。

最佳答案

这在使用 NSFetchedResultsController 时是不可能的。您必须手动获取数据并实现 UITableView 的委托(delegate)方法。

编辑:哇哦,我错了,对此有一个相当简单的解决方案。设置两个排序描述符:

  • completedDate 的第一个(降序)。对于所有未完成的任务,该字段都是相同的 (nil)。

  • addedDate 添加第二个(升序)。它将按完成日期排序(最新的在前),但在第一部分中您不会有任何 completedDates,因此它将使用添加的日期(最早的在前)。

对于第二部分,它将只使用 completedDate(最新的优先),所以你去吧。

关于iphone - NSFetchedResultsController 对不同的部分进行不同的排序(升序/降序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com