2016-12-17 47 views
1

我正在研究核心數據應用程序。我使用Xcode 8.2。NSFetchedResultsControllerDelegate和Swift 3 - 不調用didChange方法

並非所有的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>) 

回答

0

我想出了問題所在。我使用的基類(比如說)MyFetchedResultsControllerTableViewDataSource,其中NSFetchedResultsController被實例化,誰的委託被指定爲'self'。

問題是基類沒有在子類中實現這些方法。我不得不在基類中做一個默認的實現然後覆蓋,然後它工作。

這與objective-C不同,它將在運行時檢查可選方法實現與'respondsToSelector'...

相關問題