gpt4 book ai didi

ios - 在 NSSortDescriptor 中排序(今天之前或之后)

转载 作者:行者123 更新时间:2023-11-29 11:47:53 25 4
gpt4 key购买 nike

我有一个 NSFetchedResultsController,它为 UITableViewController 提供 Appointment 实体,这些实体具有属性 dateTime.

我的目标是有一个这样排序的约会列表:

  1. 今天
  2. 明天
  3. 后天
  4. 昨天
  5. 前天

换句话说:首先排序是在今天之前还是之后,然后是 dateTime。因此,首先对 (dateTime > %TODAY%) 进行排序,然后对 dateTime 本身进行排序( future 升序,过去降序)。

有什么办法吗?我的问题是我不能在排序描述符中使用 %TODAY%,但也许有另一种方法可以实现相同的视觉效果。

更新:请注意,NSFetchedResultsController 无法接受已接受的答案。我选择了另一种解决方案,在显示 View 之前对 Appointments 进行排序,将其保存到数据库中,然后让 NSFetchedResultsController 获取更改。

更新 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)
}

最佳答案

使用两个 fetchedResultsControllers,一个使用谓词升序排序,排除今天之前创建的那些,另一个使用谓词降序排序,排除 future 约会。

编写一个函数在 fetchedResultsController indexPath 和 tableview 的 indexPath 之间进行转换,反之亦然。只需确保跟踪您正在处理的 indexPath 类型,这并不难。

关于ios - 在 NSSortDescriptor 中排序(今天之前或之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42626819/

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