I followed this suggestion: Format sectionNameKeyPath NSFetchedResultsController - Swift
I'm having a bit of a problem with this implementation. Using Xcode 8 and iOS 10.
I set Codegen to Manual/None and added my NSManagedObject Subclasses.
Then I added as you suggested:
var sectionIdentifier: String
{
get
{
let dateFormatter = DateFormatter()
// dateFormatter.dateStyle = .short
// dateFormatter.timeStyle = .none
// ..or to stick to your original question:
dateFormatter.dateFormat = "yyyy-MMM-dd"
return dateFormatter.string(from: date! as Date)
}
}
But for whatever reason it gets ignored by sectionNameKeyPath. When I enter "date" in sectionNameKeyPath I get the same result as AllReadyHome mentioned above.
I even tried:
return (date?.description)!
It didn't yield any results.
Maybe someone can point me in the right direction...
Update 1: That's what my fetchedResultsController look like:
let fetchRequest: NSFetchRequest<Time> = Time.fetchRequest()
fetchRequest.fetchBatchSize = 20
let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "sectionIdentifier", cacheName: "Time")
When using date, which is an attribute of my entity:
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "date", cacheName: "Time")
Update 2: When using the sortDescriptor as suggested, I get a crash ("sectionIdentifier not in entity):
let fetchRequest: NSFetchRequest<Time> = Time.fetchRequest()
fetchRequest.fetchBatchSize = 20
let sortDescriptor1 = NSSortDescriptor(key: "sectionIdentifier", ascending: false)
let sortDescriptor2 = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor1, sortDescriptor2]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "sectionIdentifier", cacheName: "Time")
Update 3: I get the following warning when getting to the screen:
A section returned nil value for section name key path 'sectionIdentifier'. Objects will be placed in unnamed section
CoreData: error: (NSFetchedResultsController). A section returned nil value for section name key path 'sectionIdentifier'. Objects will be placed in unnamed section