2011-03-07 18 views
1

申し訳ありませんがこれは初心者の質問です。私はCore Dataの周りを頭で覆そうとしています。複数のNSFetchedResultsコントローラがiOS COreDataで使用できますか?

各タブにナビゲーションコントローラが含まれているタブバーアプリケーションがあります。各ナビゲーションコントローラのトップレベルは、コアデータストアにある同じデータセットの特定の異なるビューを示すテーブルです。これはiTunesのようなもので、1つのタブにアーティストが編成した曲が表示され、別のタブにはタイトルで編成された曲が表示されます。

私の質問はどこにNSFetchedResultsControllerが生きる必要があるのですか?各ナビゲーションコントローラは独自のNSFetchedResultsControllerを持ち、固有の方法でフェッチを実行できますか、両方のタブにアクセスできるようにFRCをアプリケーションデリゲートに配置する必要がありますか?私はコンテキストがアプリケーションデリゲートにあることを知っているので、これはここでも同様であると思っていました。助けてくれてありがとう。

答えて

0

NSFetchedResultsControllerからアプリケーションデリゲートや特定のView Controllerに直接関係はありません。

一般に、データセットに対応するFRCがあります。この同じデータセットがアプリ内のすべてのVCに適用される場合、FRCをアプリ全体で利用できるようにすることができます。特定のVCと密接に関連する多数の異なるデータセットがある場合、そのVCのメンバー変数にすることができます。

私が取り組んだアプリケーションでは、VCごとに1つのFRCが最も一般的です。

1

複数のNSFetchedResultsControllerに問題があるのはなぜですか?彼らは単にデータを取得し、変更のコンテキストを監視します。

複数のNSFRControllerで問題が発生することはありません。少なくとも、それらが独自のviewControllerにある場合はもちろん、2つの異なるNSFRCデリゲートから同じtableViewを変更しないでください。

通常、viewWillDisappearメソッドでNSFe​​tchedResultsControllerを無効にします(つまりself.frc = nil)。
ただ1つしか表示されていない場合、5つのUITableViewを更新する必要はありません。

編集:少し考えてみたら、ユーザーがタブを切り替えるたびに新しいFRCを割り当てることによるパフォーマンスへの影響は、5つのテーブルビューの更新よりも大きいという結論に達しました。とにかく表示されていないときにtableViewsがセルを更新するかどうかは決して確認しませんでした。

+0

私はviewDidUnloadのNSFRCをリリースし(そして、nilを設定します)これは、VCが見えなくなったとき(およびメモリが不足するとき)にのみ呼び出され、viewController間を切り替えるときにデータをより速く表示することができます。それ以外の場合は、コンテキストに加えられた変更が確実に表示されるようにtableViewを再ロードする必要があります。 – FelixLam

+0

あなたは正しいです。あなたが言ったように、それを変えるのはいい考えです。私は、私のアプリケーションの強化要求を提出します。ありがとう。 –

0

NSFetchedResultsControllerは、コアデータからUITableViewにデータを提供するために特別に設計されています。したがって、各テーブルビューは、テーブルビューのコントローラ内に独自のコントローラを持つ必要があります。

関連する問題