【问题标题】:NSFetchedResultsControllerDelegate and Swift 3 - not calling didChange methodsNSFetchedResultsControllerDelegate 和 Swift 3 - 不调用 didChange 方法
【发布时间】:2016-12-17 16:20:30
【问题描述】:

我正在开发一个 Core Data 应用程序。我正在使用 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>)

【问题讨论】:

    标签: swift core-data nsfetchedresultscontroller


    【解决方案1】:

    我发现了问题所在。我正在使用一个基类(比如)MyFetchedResultsControllerTableViewDataSource,其中实例化了 NSFetchedResultsController,并且将谁的委托指定为“self”。

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

    这与 Objective-C 不同,后者会在运行时检查带有 'respondsToSelector' 的可选方法实现...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多