データを含むテーブルをユーザーに表示しています。ビューが表示されるとすぐに、更新されたデータがあるかどうかを確認するためにWeb呼び出しを行います(非同期的に)。サービスコールが戻ると、私はコアデータとビューを更新したいと思います。CoreData:バックグラウンドで更新し、メインスレッドで読み取りによりデッドロックが発生する
ビューはサービス呼び出しと同じデータを読み込むため、残念ながらデッドロックが発生することがよくあります。これをどうすれば解決できますか?
私は、すぐにそれが凍結だとしてシミュレータを一時停止すると、待機中のスレッドは、次の場所で待っています
背景(更新)スレッド:(psynch_cvwait)
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
メインスレッド:(psynch_mutexwait ) 実行中filteredArrayUsingPredicate
ありがとう!
紹介文からMVCモデルを壊しているように感じました。データを制御し、それをフェッチするオブジェクトは1つだけでなければなりません。このビューは、モデルと交信しているコントローラーと会話する必要があります。 1つのオブジェクトだけが非同期呼び出しを行う場合、デッドロックは発生しません。それはとにかくちょうどちょうどちょっとです – simonpie
私はそれを取得しない...私は1つのViewControllerがあります。ビューはこのコントローラにデータを要求します( 'filteredArrayUsingPredicate'を実行します)。同じViewControllerが、非同期Webサービス呼び出し(viewWillAppear)を開始します。この呼び出しは、戻り後にデータをデータベースに書き込みます。したがって、非同期呼び出しを行うオブジェクトは1つしかありませんが、それでもデッドロックが発生します。 – swalkner
問題への実際の解決方法を見つけたことはありますか?私は似たような状況になりました(最終的に!)デバッガに閉じ込められましたが、ここからどこに行くのか分かりません... – elsurudo