Формат 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)
И это все, что нужно сделать!