Я хочу обновить NSFetchedResultController с другим предикатом, если пользователь нажмет на лист действий.Обновить NSFetchedResultController в Swift
Вот код:
lazy var fetchResultController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "Debt")
let filterText:String?
let ascending:Bool?
if NSUserDefaults.standardUserDefaults().objectForKey("filterType")?.stringValue == "name" {
filterText = "name"
ascending = true
}
else
{
filterText = "date"
ascending = true
}
let sortDescriptor = NSSortDescriptor(key: filterText, ascending: ascending!)
fetchRequest.sortDescriptors = [sortDescriptor]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: CoreDataManager.sharedManager.managedObjectContext, sectionNameKeyPath: filterText, cacheName: nil)
fetchedResultsController.delegate = self
return fetchedResultsController
}()
@IBAction func didTouchUpInsideFilterButton(sender: UIBarButtonItem) {
let alertController = UIAlertController(title: "Filter By:", message: "", preferredStyle: .ActionSheet)
let nameAction = UIAlertAction(title: "Name", style: .Default) { (UIAlertAction) -> Void in
NSUserDefaults.standardUserDefaults().setObject("name", forKey: "filterType")
do {
try self.fetchResultController.performFetch()
} catch {
let fetchError = error as NSError
print("\(fetchError), \(fetchError.userInfo)")
}
};
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (UIAlertAction) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
};
alertController.addAction(nameAction)
alertController.addAction(cancelAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
В блоке завершения alertAction после вызова попробовать self.fetchResultController.performFetch() метод fetchResultController не вызывается снова, чтобы обновить предикат.
Решение проблемы.