NSFetchedResultsController の didChangeSection メソッドが呼び出されていません。Web を検索したところ、sectionNameKeyPath に一時的なプロパティを使用すると、この問題が発生する可能性があることがわかりました。ここから: "didChangeSection:" NSfetchedResultsController デリゲート メソッドが呼び出されない
これは本当に一時的な性質によるものですか?また、sectionNameKeyPath に一時的なプロパティを使用するときに、didChangeSection を呼び出す方法を教えてください。viewForHeaderInSection を使用してセクション ヘッダーをカスタマイズしましたが、didChangeSection メソッドなしで更新するにはどうすればよいですか?
今は で使っ[self.tableView reloadDate]
てviewWillAppear
いますが、項目の追加・削除後は0.5秒程度とはいえ少し遅く感じます。
私の fetchedResultsController のセットアップは、Apple のサンプルである DateSectionTitles のようでした: http://developer.apple.com/library/ios/#samplecode/DateSectionTitles/Introduction/Intro.html
そのサンプルは単純で- (NSFetchedResultsController *)fetchedResultsController
、フェッチ結果コントローラー部分にのみ含まれています。テーブルビュー関連のメソッドをいくつか追加しました:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
呼ばれないだけ。
日付をセクション タイトルとして使用しましたが、セクション ヘッダーの他の部分、つまり行アイテムの合計を更新する必要があります。
更新:私は間違っています。呼ばれています。セル (新しいセクションではない) を挿入すると思ったので、didChangeSection を呼び出して、カスタマイズしたセクション ヘッダーを更新する必要があります。ただし、didChangeSection は、セクションの挿入または削除に対してのみ呼び出されます。[self.tableView reloadDate] を使用するだけで、セルの変更に対してセクション ヘッダーが更新されます。
モーダルビューのクローズビューメソッドの前に [self disconnectViewControllerAnimated:YES completion:NULL] を入れてみたところ、ビューがすぐに閉じてセル挿入アニメーションが見られるようになりました。