NSFetchedResultsControllerDelegate和Swift 3 - 不调用didChange方法

时间:2016-12-17 16:20:30

标签: swift core-data nsfetchedresultscontroller

我正在开发核心数据应用程序。我正在使用Xcode 8.2。

并未调用NSFetchedResultsControllerDelegate的所有更改方法来更改对象。 (即当我将新对象插入上下文时)

有谁知道为什么会这样?为了验证我没有输入错误,我甚至从典型的主 - 详细应用模板中复制粘贴。

我希望为tableview行设置动画。

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

1 个答案:

答案 0 :(得分:0)

我弄清楚问题是什么。我正在使用基类(比如说)MyFetchedResultsControllerTableViewDataSource,其中NSFetchedResultsController被实例化,并且谁的委托被指定为'self'。

问题是基类没有实现子类所在的那些方法。我必须在baseclass中创建一个默认实现然后覆盖,然后它才能工作。

这与objective-C不同,后者会在运行时检查“respondsToSelector”的可选方法实现...