按 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 进行排序的主要内容,如果未能解决你的问题,请参考以下文章