質問

の行をクリックしたときに、私は、テーブルビューとナビゲーションビューを持って、行indexPathは、次のビューに渡されます。

詳細では、私はコアデータからデータを取得しています、のviewDidLoadを表示します。私は、アプリケーションデリゲートからフェッチを使用する

[appDelegate loadItem:i];

あなたが見ることができるように私は、行番号を担持する唯一の整数を渡しています。

質問です: どのように私は別のスレッドで、この呼処理を行うことができます。(バックグラウンドで) 時々フェッチの結果が大きすぎるので、処理は詳細ビューをプッシュ遅延3秒かかりますので、私はこれを必要とします。

私は3秒間アクティビティインジケータを表示する必要があるので、私は処理されているフェッチしながら、インジケータ用のUIを使用できるように、別のスレッドでのフェッチ配置する必要があります。

私は、私は初心者ですとして最も簡単な方法をしたいです。いくつかのコードを投稿することは素晴らしいことでしょう。 あるいはリンク:)

役に立ちましたか?

解決

マルチスレッドを混合し、Core Dataは、単純な作業ではありません。 コアデータ・プログラミング・ガイドの「マルチスレッドコアデータと」のセクションは、あなたが注意する必要があるすべてのものを含む複数のスレッド、上のコアデータと対話する方法について説明します。

基本的には、スレッドごとに別々の管理対象オブジェクトコンテキストを作成する必要があります。これらのコンテキストは1つの管理オブジェクトモデルと永続ストアへのアクセスを共有することができます。あなたのケースのために、彼らは次のことをお勧めします:

  

あなたは2つの管理対象オブジェクトコンテキストを使用します   単一の永続的に関連付けられています   ストアコーディネータ。あなたは1でフェッチ   背景上の管理対象オブジェクトコンテキスト   スレッド、およびオブジェクトIDを渡し   別のスレッドにオブジェクトをフェッチ。に   (典型的には、第二のスレッド   あなたがそのように、アプリケーションのメインスレッド、   そして、あなたが使用)の結果を表示することができます   オブジェクトの故障する2番目のコンテキスト   あなたが使用します(これらのオブジェクトIDを持ちます   objectWithID:インスタンス化します   オブジェクト)。

これは、アプリケーションがこれを実行する方法を示しBackgroundFetchingのサンプルのように聞こえるが、私は私のシステム上でそれを持っていません。

あなたはあまりにも遠く、あなたのフェッチ要求をマルチスレッドに入る前に、

しかし、私はそれをロードするので、時間がかかっている理由に、ハード見てみたいです。私が最初に-setFetchBatchSizeを使用することをお勧めしたい:あなたのNSFetchRequestにあなたの(あまりにも、あなたに多くのメモリを節約します)フェッチを介してメモリにロードされたオブジェクトの数を制限します。次に、私は-setPropertiesToFetch使用したい:あなたはすぐに使用することがありますのみにフェッチされた性質を制限する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top