Как поставить прошлые даты из основных данных в нижней части uitableview? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть табличное представление, которое сортирует основные данные по дате в порядке возрастания, и я хотел бы поместить даты, которые уже прошли, внизу табличного представления.

override func viewWillAppear(_ animated: Bool) {
    let fetchRequest: NSFetchRequest<Reminder> = Reminder.fetchRequest()
    let sort = NSSortDescriptor(key: #keyPath(Reminder.date), ascending: true)
    fetchRequest.sortDescriptors = [sort]
    let reminders = try! PersistenceController.context.fetch(fetchRequest)
    self.remindersArray = reminders
    self.tableView.reloadData()
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MainTableViewCell
    cell!.titleLabel.text = remindersArray[indexPath.row].title
    cell!.dateLabel.text = DateAssist.DateToString(remindersArray[indexPath.row].date!)
    cell!.timeLabel.text = DateAssist.TimeToString(remindersArray[indexPath.row].date!)
    //        }
    return cell!
}

1 Ответ

0 голосов
/ 04 ноября 2019

Одним из возможных решений, если ваш набор данных не слишком большой, является сортировка массива после извлечения вместо использования дескриптора сортировки.

Добавьте следующую функцию в ваш класс напоминания

extension Reminder {
    func isAfter(_ date: Date) -> Bool {
        return self.date > date
    }
}

и затем сортируйте массив как

    let self.remindersArray = reminders.sorted(by: { 
        let now = Date()
        if $0.isAfter(now) == $1.isAfter(now) {
            return $0.date < $1.date
        }
        return $0.isAfter(now) 
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...