Формат sectionNameKeyPath NSFetchedResultsController - Swift

Я пытаюсь отформатировать sectionNameKeyPath для моей основной выборки данных с использованием сохраненных NSDate приписывать. Он полностью работает и тянет / сортирует записи по разделам на основе NSDate но я не уверен, как отформатировать его, чтобы отобразить его с помощью дд-мм-гггг.

Я знаю, как отформатировать NSDate, используя:

let date = NSDate(timeIntervalSince1970:myTimeInterval)
                                let dateFormatter = NSDateFormatter()
                                dateFormatter.dateFormat = "dd-MM-yyyy"

Мой текущий запрос на выборку с использованием основного атрибута данных sectionDate в качестве раздела раздела для sectionNameKeyPath

FETCH

let fetchRequest = NSFetchRequest(entityName: "VisitDetails")
        let primarySortDescriptor = NSSortDescriptor(key: "dateDue", ascending: false)
        let sortDescriptors = [primarySortDescriptor]
        fetchRequest.sortDescriptors = sortDescriptors

        let frc = NSFetchedResultsController(
            fetchRequest: fetchRequest,
            managedObjectContext: self.managedObjectContext!,
            sectionNameKeyPath: "dateSections",
            cacheName: nil)

        frc.delegate = self

Поэтому, чтобы уточнить, я хочу отформатировать вывод и отсортировать только по dd-MM-гггг. В настоящее время это выглядит как

введите описание изображения здесь

Я предполагаю, что Hack создает дополнительный атрибут и вводит отформатированную строку, а затем использует это для разделения результатов?

1 ответ

Решение

Я только что сделал это для проекта, над которым я работаю. Вот что я сделал:

Необязательно, но настоятельно рекомендуется установить mogenerator. Здесь есть хорошее руководство по настройке вашего основного проекта данных для его использования.

В любом случае, в вашей модели данных убедитесь, что у вас есть подкласс NSManagedObject, связанный с сущностью. Если вы еще этого не сделали и не используете mogenerator, вы можете сделать это по-яблочному.

В своем классе VisitDetails добавьте:

var formattedDateDue: String {
    get {
        let dateFormatter = NSDateFormatter()
        // Apple suggested locale-aware technique:
        // dateFormatter.dateStyle = .ShortStyle
        // dateFormatter.timeStyle = .NoStyle
        // ..or to stick to your original question:
        dateFormatter.dateFormat = "dd-MM-yyyy"
        return dateFormatter.stringFromDate(self.dateDue)
    }
}

(Предполагая, что вы хотите, чтобы ваши разделы были сгруппированы по дате dateDue, в противном случае создайте вычисляемый атрибут для вашего атрибута dateSections.) Затем вы модифицируете свой извлеченный контроллер результатов сверху, чтобы использовать вычисляемый атрибут:

let frc = NSFetchedResultsController(
        fetchRequest: fetchRequest,
        managedObjectContext: self.managedObjectContext!,
        sectionNameKeyPath: "formattedDateDue",
        cacheName: nil)

И это все, что нужно сделать!

Другие вопросы по тегам