2016-12-17 12 views
1

私はCore Data Appで作業しています。私はXcode 8.2を使用しています。NSFetchedResultsControllerDelegateとSwift 3 - 変更しないでください変更メソッド

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

答えて

0

私は問題が何かを理解しました。 NSFetchedResultsControllerがインスタンス化され、代理人が 'self'に指定されているところで、ベースクラス(MyFetchedResultsControllerTableViewDataSource)を使用しています。

問題は、基本クラスがサブクラスがあったメソッドを実装していないことです。ベースクラスでデフォルトの実装を作成してオーバーライドしなければなりませんでした。

これは、実行時に 'respondsToSelector'を使用してオプションの実装をチェックする、objective-Cとは異なります。

関連する問題