2016-12-17 2 views
1

Я работаю над Core Data App. Я использую Xcode 8.2.NSFetchedResultsControllerDelegate и Swift 3 - не вызов didChange методы

Не все методы изменения NSFetchedResultsControllerDelegate не вызываются для изменения объектов. (т. е. когда я вставляю новый объект в контекст)

Кто-нибудь знает, почему это может быть? Чтобы проверить, что я не сделал опечатку, я даже скопировал ее с типичного шаблона приложения Master-Detail.

Я надеюсь оживить строки таблицы.

// works 
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) 

// DOESN'T WORK!! 
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, 
       didChange anObject: Any, 
       at indexPath: IndexPath?, 
       for type: NSFetchedResultsChangeType, 
       newIndexPath: IndexPath?) 

// WORKS 
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) 

ответ

0

Я понял, в чем проблема. Я использую baseclass (скажем) MyFetchedResultsControllerTableViewDataSource, где экземпляр NSFetchedResultsController создан, а делегат указан в «self».

Проблема в том, что базовый класс не применял те методы, в которых были созданы подклассы. Я должен был выполнить реализацию по умолчанию в baseclass, а затем переопределить, тогда это сработало.

Это отличное от объектива-C, которое будет проверяться во время выполнения для дополнительных реализаций метода с помощью «responsesToSelector» ...

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