Предикат NSFetchRequest для сортировки по дате, используя только компонент времени - PullRequest
1 голос
/ 05 января 2020

Вспомните приложение Alarm на iPhone, аварийные сигналы отсортированы по времени. Скажем, эти тревоги были сохранены в Базовых данных с компонентом даты, являющимся фактической датой, когда они были созданы, но с компонентом времени, выбранным средством выбора даты. Поэтому при их извлечении вам нужно игнорировать компонент даты и сортировать их только по времени.

Это работает, если все тревоги созданы в одну и ту же дату:

fetchRequest.sortDescriptors = [NSSortDescriptor(key: date, ascending: true)]

Но если они созданные в отдельные дни, очевидно, что те, которые созданы первыми, перечислены первыми по дате и отсортированы по времени в каждой группе дат. Я хочу полностью игнорировать компонент даты при выполнении такой сортировки и упорядочивать все только по компоненту времени.

1 Ответ

2 голосов
/ 05 января 2020
  • Создание глобального форматера даты в подклассе NSManagedObject

    let timeFormatter : DateFormatter = {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.dateFormat = "HH:mm:ss"
        return formatter
    }()
    
  • и вычисляемое свойство

    @objc var time : String {
        return timeFormatter.string(from: date)
    }
    
  • Затем извлекайте записи без сортировки и сортируйте их вручную

    let sortedRecords = records.sorted{ $0.time < $1.time }
    
...