按 NULL NSDates 对 NSFetchedResultsController 进行排序

Posted

技术标签:

【中文标题】按 NULL NSDates 对 NSFetchedResultsController 进行排序【英文标题】:Sorting NSFetchedResultsController by NULL NSDates 【发布时间】:2014-02-10 14:50:57 【问题描述】:

我有一个循环遍历数据数组的表格视图。数据是一组可能附有提醒时间的联系人。例如:

杰西卡 约翰 比尔 卡特里娜飓风(2 月 9 日) 布赖恩(2 月 11 日)

现在,它通过 core-data 属性reminderDate 以升序方式对 tableview 进行排序。它可以半正确地工作。唯一的问题是我希望将具有 NULL reminderDate 的项目扔到 NSFetchedResultsController 的末尾而不是开头。

理想情况下,它应该是这样的:

卡特里娜飓风(2 月 9 日) 布赖恩(2 月 11 日) 杰西卡 约翰 比尔

我不能使用比较 NSSortDescriptor,因为 NSFetchedResultsController 不支持它。另外,我宁愿在我从NSFetchedResultsController 获得结果之后 之后执行排序,而是在我进行查询之前执行排序。

这是我当前使用的代码:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"reminderDate" ascending:YES];

[fetchRequest setSortDescriptors:@[sortByDate]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                    managedObjectContext:context
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];

我认为我应该添加另一个 sortDescriptor,但没有任何东西可以正常工作。

【问题讨论】:

所以 sortDescriptorWithKey:ascending:comparator: 行不通? Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor (comparator blocks are not supported)' 那么sortDescriptorWithKey:ascending:selector:呢? 嗯,从未尝试过选择器。不知道我是否知道如何使用它。我会试一试并报告。 类似问题***.com/questions/21643888/… 【参考方案1】:

我最终做了他们在这里提到的事情:Using NSSortDescriptor to keep blank values down the list

我创建了一个 BOOL 值来指示用户是否设置了提醒。所以,我按提醒的存在排序,然后按日期排序。

NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"reminderDate" ascending:YES];
NSSortDescriptor *sortByHasReminder = [NSSortDescriptor sortDescriptorWithKey:@"hasReminder" ascending:NO];

效果很好。作为一个数据库爱好者,我讨厌有不必要的字段,但这是我能用 NSSFetchedResultsController 做的最好的事情。

【讨论】:

这确实很令人沮丧,但我也想不出另一种方法来解决这个问题......

以上是关于按 NULL NSDates 对 NSFetchedResultsController 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用本周和周末在 2 个 NSDates 之间签到

快速排序NSDates数组[重复]

比较 NSDates 以检查今天是不是介于两者之间

比较没有时间分量的 NSDates

UITableView 部分中的 NSDates 不反映来自 UIDatePicker 的日期

如何在不使用 NSCalendar 的情况下创建 NSDates(一天的开始和结束)?