NSFetchedResultsControllerDelegate 和 Swift 3 - 不调用 didChange 方法

NSFetchedResultsControllerDelegate and Swift 3 - not calling didChange methods

我正在开发 Core Data 应用程序。我正在使用 Xcode 8.2.

并非所有 NSFetchedResultsControllerDelegate 的更改方法都没有被调用来更改对象。 (即当我将一个新对象插入到上下文中时)

有人知道这是为什么吗?为了验证我没有打错字,我什至从典型的主从应用程序模板中复制粘贴了它。

我希望为表格视图行设置动画。

// 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>)

我知道问题出在哪里了。我正在使用一个基类(比如)MyFetchedResultsControllerTableViewDataSource,其中 NSFetchedResultsController 被实例化并且谁的委托被指定为 'self'。

问题是基类没有实现子类所在的那些方法。我不得不在基类中创建一个默认实现,然后覆盖,然后它就起作用了。

这与 objective-C 不同,后者会在运行时使用 'respondsToSelector'...

检查可选方法的实现