0

タイトルにあるように、Core Data の executeFetchRequest は「時々」遅くなり、UI をブロックすることさえあります。

別のスレッドがコアデータにデータを保存しているため、フェッチを実行できないのではないかと疑っています。

古いデータを取得する可能性があるため、バックグラウンド スレッドにデータを保存してフェッチを実行することはできません。

どうすればこれを解決できますか?

4

1 に答える 1

1

このページは、コア データ スタックの設計を改善する方法の素晴らしい説明です。 http://www.cocoanetics.com/2012/07/multi-context-coredata/

基本的に、その要点は、永続ストア コーディネーターと対話するバックグラウンド コンテキスト (NSPrivateQueueConcurrencyType) があることです。これは、高価なディスク書き込み操作がすべてバックグラウンドで行われ、メイン スレッドがブロックされないことを意味します。次に、コア データのやり取りのほとんどを処理するメインの NSManagedObjectContext を作成します。最後に、大量の新しいレコードをインポートしたり、大量の処理を行ったりするときはいつでも、子コンテキストを作成し、その親をメイン コンテキストに設定できます。このようにして、子を保存すると変更がメイン コンテキストにプッシュされ、後でメイン コンテキストが自動的に保存され、バックグラウンド コンテキストが変更をディスクに書き込みます。

個人的には、これは非常に洗練されたソリューションだと感じており、自分のアプリの 1 つに採用しましたが、非常にうまく機能しています。

于 2013-06-20T00:39:04.137 に答える