0

現在、タブバーのある iPhone プロジェクトがあります。タブバーには 2 つのビューがあります。どちらのビューも Core Data データベースにデータをロードまたは保存します (これらのビューは両方とも、Web サービスからデータを収集してデータベースに保存するメソッドを開始します)。ビューが読み込まれると、データベースからデータが読み込まれ、ビューのテーブルにデータが入力されます。アプリを実行してタブバーの 2 番目のビューをクリックすると、最初のビューはまだ Web サービスからデータをロードし、別のスレッドでデータベースに挿入しています。これは問題ありませんが、最初のビューが Web サービスからデータベースへのすべてのデータのロードを完了すると、2 番目のビュー コントローラーがデータベースからデータをロードしている場合にのみ、両方のビュー コントローラーがフリーズします。

コンソールにエラーは表示されず、xcode によるエラーの表示もありません。私のプロセスはすべて異なるスレッドで動作するため、メインスレッドがフリーズするという問題はありません。Web サービスからデータを取得してデータベースに保存するのはメソッドであり、メソッドの最後にNSLog(@"View Controller 1 Save Complete"). これが呼び出され、かつ 2 番目のビュー コントローラーがまだデータを読み込んでいるとすぐに、フリーズします。アプリ全体が応答しません (何も機能しません)。

私は他のSOの質問に関する情報に目を通し、NSManagedObjectContextフェッチまたは挿入ごとに新しい宣言を行うことを推奨しましたが、それは問題を解決していません。

何が起こっているのか知っている人、またはもっと詳しい情報を知りたい人は、私に知らせてください。

編集: Xcode 4.5 と IOS 6 シミュレーターを使用しています。これは、1 週間前にリリースされた新しい IOS のベータ版です。ベータ版の使用を開始する前にこの問題が発生したため、これがエラーではないことはわかっています。

4

1 に答える 1

3

A possibility that I have run into in the past, is trying to interact with an MOC on a thread which is different than the one it was created on. This kind of thing can happen if you are trying to do concurrency, and you must be very careful to know which thread you are on at all times when talking to an MOC. For example, with asynchronous things, your callbacks might be executing on a different thread than you think (i.e. viewDidLoad happens on the main thread, so if you are creating an MOC there, you cannot use it from a different thread later).

于 2012-06-17T07:34:42.497 に答える