タイトルにあるように、Core Data の executeFetchRequest は「時々」遅くなり、UI をブロックすることさえあります。
別のスレッドがコアデータにデータを保存しているため、フェッチを実行できないのではないかと疑っています。
古いデータを取得する可能性があるため、バックグラウンド スレッドにデータを保存してフェッチを実行することはできません。
どうすればこれを解決できますか?
タイトルにあるように、Core Data の executeFetchRequest は「時々」遅くなり、UI をブロックすることさえあります。
別のスレッドがコアデータにデータを保存しているため、フェッチを実行できないのではないかと疑っています。
古いデータを取得する可能性があるため、バックグラウンド スレッドにデータを保存してフェッチを実行することはできません。
どうすればこれを解決できますか?
このページは、コア データ スタックの設計を改善する方法の素晴らしい説明です。 http://www.cocoanetics.com/2012/07/multi-context-coredata/
基本的に、その要点は、永続ストア コーディネーターと対話するバックグラウンド コンテキスト (NSPrivateQueueConcurrencyType) があることです。これは、高価なディスク書き込み操作がすべてバックグラウンドで行われ、メイン スレッドがブロックされないことを意味します。次に、コア データのやり取りのほとんどを処理するメインの NSManagedObjectContext を作成します。最後に、大量の新しいレコードをインポートしたり、大量の処理を行ったりするときはいつでも、子コンテキストを作成し、その親をメイン コンテキストに設定できます。このようにして、子を保存すると変更がメイン コンテキストにプッシュされ、後でメイン コンテキストが自動的に保存され、バックグラウンド コンテキストが変更をディスクに書き込みます。
個人的には、これは非常に洗練されたソリューションだと感じており、自分のアプリの 1 つに採用しましたが、非常にうまく機能しています。