我有一个NSFetchedResultsController
,其中UITableViewController
个Appointment
个实体拥有({1}}个属性。
我的目标是有一个这样分类的约会列表:
换句话说:
首先是在今天之前或之后,然后是dateTime
。首先排序dateTime
,然后排在(dateTime > %TODAY%)
本身(未来升序,过去降序)。
有没有办法做到这一点?我的问题是我不能在排序描述符中使用%TODAY%,但也许还有另一种方法来实现相同的视觉效果。
更新:请注意dateTime
无法接受答案。我选择了另一个解决方案,在显示视图之前对NSFetchedResultsController
进行排序。将其保存到数据库中,然后让Appointments
接收更改。
更新2: 接受的答案确实完全符合我的要求。我的实施:
NSFetchedResultsController
答案 0 :(得分:1)
使用两个fetchedResultsControllers,一个按谓词排序,不包括今天之前创建的谓词,另一个按谓词排序,不包括未来的约会。
编写一个函数,在fetchedResultsController indexPath和tableview的indexPath之间进行转换,反之亦然。只需确保跟踪你正在处理的indexPath类型,并不是那么难。
答案 1 :(得分:0)
这是唯一的想法。也许你可以像这样创建 sortdescriptor :
NSSortDescriptor(key: "test", ascending: true) { (v1, v2) -> ComparisonResult in
guard let d1 = v1 as? Date else
{
return .orderedAscending
}
guard let d2 = v2 as? Date else
{
return .orderedAscending
}
if abs(d1.timeIntervalSinceNow) < abs(d2.timeIntervalSinceNow) { return .orderedAscending }
if abs(d1.timeIntervalSinceNow) > abs(d2.timeIntervalSinceNow) { return .orderedDescending }
return .orderedSame
}
我认为这将是有效的。