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

时间:2017-03-06 13:24:05

标签: ios sorting datetime core-data nssortdescriptor

我有一个NSFetchedResultsController,其中UITableViewControllerAppointment个实体拥有({1}}个属性。

我的目标是有一个这样分类的约会列表:

  1. 今天
  2. 明天
  3. 后天
  4. 昨天
  5. 前天
  6. 换句话说: 首先是在今天之前或之后,然后是dateTime。首先排序dateTime,然后排在(dateTime > %TODAY%)本身(未来升序,过去降序)。

    有没有办法做到这一点?我的问题是我不能在排序描述符中使用%TODAY%,但也许还有另一种方法来实现相同的视觉效果。

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

    更新2: 接受的答案确实完全符合我的要求。我的实施:

    NSFetchedResultsController

2 个答案:

答案 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
}

我认为这将是有效的。