I'm having NSFetchedResultsController as lazy computed property. Based on a variable, sort descriptor is created. Here's my code:
private var sortOption: Options = .none
fileprivate lazy var inspirationsResults: NSFetchedResultsController<Inspiration> = {
// Create Fetch Request
let fetchRequest: NSFetchRequest<Inspiration> = Inspiration.fetchRequest()
// Configure Fetch Request
//let optn = self.sortOption.rawValue
switch (self.sortOption) {
case .sortAscending:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "inspirationName", ascending: true)]
case .sortDescending:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "inspirationName", ascending: false)]
case .sortByAdding:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
case .sortByUpdated:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
case .showFilter:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
default:
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
}
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
fetchRequest.fetchBatchSize = 10
// Create Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: CoreDataManager.shared.getContext(), sectionNameKeyPath: nil, cacheName: nil)
// Configure Fetched Results Controller
fetchedResultsController.delegate = self
return fetchedResultsController
}()
When sortOption variable's value is changed, I want to recompute "inspirationsResults" variable and change the sort descriptor accordingly. How to achieve it?
Put the code to compute the sort descriptor into the
didSet
observer of thesortOption
property:The
default
case covers all explicit cases which sort bytimeStamp - false
.After changing the sort descriptor you need to perform a new fetch and reload the table view.
And in the method to initialize the results controller simply write: