2009-08-21 4 views
2

は、私がデータを閲覧するために使用される主なUIを持っているし、私は/挿入/編集データをダウンロードしているバックグラウンドスレッドを持っています。ココアコアデータ - 私は、デフォルトのXcodeのテンプレートに基づいてコアデータアプリケーションを持つバックグラウンドスレッド

アプリケーションの起動時にアプリケーションが読み込んだ2つのNSManagedObjectContextを作成し、バックグラウンドスレッドのもう一方のスレッドに書き込みを行い、書き込みが完了したらperformSelectorOnMainThreadを呼び出して2つのNSManagedObjectContextオブジェクトを同期させます。

私はココアにかなり新しいですし、誰もが、これは動作するはずですし、私が正しく動作するように同期を得ることができないとして、誰もがこのことについて例や議論の知っていることを確認することができればと思いました。

答えて

1

手動でバックグラウンドスレッドを作成していますか?もしそうなら、NSURLConnectionのCocoaのデリゲートパターンに従い、バックグラウンドでの実際のダウンロードとフォアグラウンドでのデータの処理を行うことをお勧めします。

あなたはまだ多くの洞察力のためのコアデータ・プログラミング・ガイドのMulti-Threading in Core Dataセクションを読んで、手動で作成されたスレッドが必要と感じた場合。

+0

私はデータをダウンロードする必要があるとして、応答のためのおかげで、私はそれは、ユーザーが既に格納されたデータを閲覧している全てながら、状況に応じて、より多くのデータをダウンロードし、コアデータにデータを挿入する、プロセスを手動でスレッドを作成しています。私はappleのdocを読んだことがありますが、2人の永続的な店舗コーディネーターがいらっしゃいましたので、もう一度お試しください。 – Craig

+0

私は、スレッドごとに別々の管理対象オブジェクトコンテキストを作成し、単一の永続的ストアコーディネータを共有します。しかし、バックグラウンドスレッドの実行が完了すると、メイン管理対象オブジェクトのデータをリロードまたはマージすることはできません。私はそれを見つけることができないようだが、メインスレッドでリロードするように指示する簡単な方法があります。 withObject:waitUntilDone: – Craig

+0

あなたは-performSelectorOnMainThreadと呼ばれるNSObjectのメソッドを使用して、メインスレッド上のメソッドを呼び出すことができます繰り返しますが、私はNSURLConnectionの非同期メソッドを使用してではなく、同期独自のスレッド上でそれをやってお勧めします。 –

3

あなたは-[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:]を見てみたいです。ワーカースレッドの管理オブジェクトコンテキストから変更通知を登録します。通知コールバックで、メインスレッドのマネージオブジェクトコンテキストのmergeChangesFromContextDidSaveNotificationを呼び出します。メインスレッドでこのメソッドを呼び出すようにしてください(変更通知は作業スレッドに掲載されます)。

関連する問題