У меня проблемы с реализацией очень простого NSFetchedResultsController
.У меня есть следующее супер простое демо-приложение, настроенное только с одним представлением и кнопкой, реализация стека CoreData - это та, которая автоматически генерируется Xcode.
class ViewController: UIViewController, NSFetchedResultsControllerDelegate {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
override func viewDidLoad() {
super.viewDidLoad()
// Set up the NSFetchedResultsController.
let fetchRequest = NSFetchRequest<Demo>(entityName: "Demo")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: appDelegate.persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil)
// Delegate is set!
controller.delegate = self
do {
try controller.performFetch()
print(controller.fetchedObjects?.count) // This prints the correct count when restarting the app.
} catch {
fatalError("Failed to fetch entities: \(error)")
}
}
@IBAction func addNewPressed(_ sender: Any) {
NSEntityDescription.insertNewObject(forEntityName: "Demo", into: appDelegate.persistentContainer.viewContext)
// Save the context
do {
try appDelegate.persistentContainer.viewContext.save()
} catch {
print(error)
}
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
print("called") // NEVER CALLED!
}
}
Когда вызывается addNewPressed
, новый объектвставлен и сохранен.Однако controllerDidChangeContent
никогда не вызывается.
Я что-то упускаю здесь тривиально?
Спасибо