2012-03-05 26 views
0

私は150000以上のレコードを処理するCore Dataプロジェクトに取り組んでいます。レコードは、NSFetchedResultsControllerを使用してテーブルビューで表示されます。レコードは、私のエンティティの異なる属性を使用してソートされます。アプリケーションを終了した後にNSFetchResultsControllerキャッシュを保存します

アプリを素早く感じさせるために、さまざまな並べ替え記述子を持つ複数のNSFetchedResultsControllerを作成して、対応する並べ替え結果を表示しました。私は、アプリケーションが起動したときにFRCを初期化し、FRCが初期化されるまでユーザーを待機させます。その後、ユーザーがソートキーを変更すると、現在のFRCを新しいソートキーのものに置き換えます。したがって、並べ替えは瞬時にと感じます。

RAMに入っているとアプリは正常に動作します。しかし、殺して再起動したときに初期化するには約15〜20秒(iPad 1)かかります。

アプリケーションの再起動時にアプリケーションが終了して復元されたときに、FRCのキャッシュデータをディスクに保存する方法はありますか?または、より良い回避策がありますか?

答えて

1

Uhm ...キャッシュ名を指定すると、NSFetchedResultControllerはすでにディスクに保存されているはずですので、コントローラを初期化する方法に依存します。

は、とにかくすべてのフェッチコントローラのキャッシュは

/Library/Caches/.CoreDataCaches/SectionInfoCaches/

「AppSandbox」に保存されていると私は、彼らがアプリケーションをシャットダウンした後に削除されますとは思いません。 あなたが簡単にライブラリフォルダにアクセスすることができ、それで遊ぶようにしてください:

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

しかし、私は、コントローラが1と同じ名前を持つキャッシュを見つけたとき、それはそれはまだ適合している場合、それはチェック初期化しまっていることを読みますおそらく膨大な量のデータでキャッシュ情報を更新するのに少し時間が費やされます。 NSOperationを使用してフェッチされたコントローラを読み込んで高速化することを考えてみましょう。 ほとんどの場合、表示されるデフォルトのものから始まることがあります。

+0

キャッシュファイルの場所をありがとう。しかし、FRCキャッシュの一部だけがディスクに保存されています(アプリの起動時にも永続的です)。また、最初にアプリを起動するときや、アプリを強制終了して再起動するときの検索との間に、目立つ違いはありません。私はアプリの起動時にキャッシュを読み込むことが最善のことではないかもしれないと思う。私は他の何かを探すべきです。私はすでにGCDを非同期フェッチに使用しています。 – CodeBreaker

関連する問題