2015-07-09 3 views
2

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

Я знаю, как форматировать 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-yyy. В настоящее время это выглядит как

enter image description here

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

+0

Два вопроса: 1. Как определяется или рассчитан 'dateSections'? 2. Вы действительно хотите сортировать разделы по этой строке формата? Или вы хотите, чтобы разделы отсортированы в порядке даты, но отформатированы с использованием этой строки формата? – pbasdf

ответ

4

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

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

Независимо от того, в вашей модели данных убедитесь, что у вас есть подкласс NSManagedObject, связанный с объектом. Если вы еще этого не сделали, и вы не используете mogenerator, вы можете do it the apple way.

В классе 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) 

И это все, что есть!

+0

Привет @ chris-eveland, я следил за вашим кодом, и он отлично работал на iOS10. На iOS11 свойство не распознается. См. Мой вопрос здесь: https://stackoverflow.com/questions/45610890/core-data-ios11-nsunknownkeyexception-crash-in-sectionnamekeypath-with-custom – alpennec

Смежные вопросы