2

NSFetchedResultsController プロトコルに準拠する tableViewController があります。バックグラウンド スレッドを使用してサーバーからデータをダウンロードして Core Data に保存した後、この tableView の NSFetchedResultsController のインスタンスによって使用されるメイン スレッド NSManagedObject コンテキストに変更をマージする必要があります。マージ直後に UI がブロックされます (数秒間) (NSFetchedResultsController が更新されます)。このブロックの原因は何ですか?このブロックを回避する方法はありますか?

このNSFetchedResultsControllerの更新はUIを更新すると思うので、別のスレッドに配置するのは適切ではないと思います。

君たちありがとう。

4

1 に答える 1

0

UIがブロックされているのは、フェッチされたコントローラーが反応し、変更ごとにテーブルビューが更新されたためだと思います。これは、NSManagedObject がストアに追加されるたびに行われます。

おそらく唯一の簡単な解決策は、バックグラウンドでデータをダウンロードし、取得したコントローラーを UITableView コントローラーのデリゲートから辞任することです。この時点で更新を実行し、コントローラーを再割り当てして状況を正常に戻すことができます。 UITableView デリゲートになってから、フェッチを再発行してください。

于 2013-08-26T09:30:38.833 に答える