我有一个NSFetchedResultsController
,它提供了一个UITableViewController
和Appointment
实体,其中包含一个属性dateTime
。在NSSortDescriptor中排序(在今天之前或之后)
我的目标是有分类的这样的任命名单:前天明天
- 今天
- 明天
- 日
- 日
换句话说: 首先sor t在今天之前还是之后,然后是dateTime
。所以首先排序(dateTime > %TODAY%)
,然后在dateTime
本身(未来上升,过去下降)。
有没有办法做到这一点?我的问题是,我不能在排序描述符中使用%TODAY%,但也许有另一种方法来实现相同的视觉效果。
UPDATE:请注意接受的答案是不可能的,NSFetchedResultsController
。我选择了另一个解决方案,在显示视图之前订购Appointments
,将其保存到数据库,并让NSFetchedResultsController
选取更改。
UPDATE 2: 接受的答案确实做到了我想要的。我的实现:
let futureAppointments = appointments.filter({ $0.dateTime != nil && $0.dateTime?.compare(Date()) == .orderedDescending })
.sorted(by: { $0.dateTime?.compare($1.dateTime! as Date) == .orderedAscending })
let pastAppointments = appointments.filter({ $0.dateTime != nil && $0.dateTime?.compare(Date()) == .orderedAscending })
.sorted(by: { $0.dateTime?.compare($1.dateTime! as Date) == .orderedDescending })
let sorted = futureAppointments + pastAppointments
for (index, appointment) in sorted.enumerated() {
appointment.order = NSNumber(integerLiteral: index)
}
您不能在fetchRequest中使用基于块的排序描述符。请参阅https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/PersistentStoreFeatures.html#//apple_ref/doc/uid/TP40001075-CH23-SW1 –
像Jon说的那样,我无法使用但是这让我想到了另一种解决方案,在获取之前使用排序描述符进行排序。现在我有一个属性'订单',每次有人打开视图时都会设置。这从未超过10个左右的约会,所以我没有看到任何性能问题。谢谢 – Arjan
@Sergey仅供参考您的答案并不完全符合我的要求(我的问题更清楚)。我做了我自己的实现,但如果你愿意,欢迎你更新你的答案。 – Arjan