1

メイン スレッドでのみ保存していることを確認するために、呼び出される単一の MOC save メソッドにログ ステートメントを追加しました。

私のアプリでは、複数のスレッド用に 2 つの Core Data MOC を管理およびマージすることに飛び込む代わりに、ファイル システムからのファイル情報だけを処理し、これらの管理されていないオブジェクトをメイン スレッドに渡すことでやり遂げることができると判断しました。その後、データを管理対象オブジェクトに保存するために使用されます。

MOC は、NSManagedObject のカテゴリを通じてアクセスされます。MOC で保存を呼び出すブロック (ASIHTTPRequest 開始ブロック) があり、ソースはそれらが常にメイン スレッドで呼び出されると述べています。

スレッド ダンプは、NSManagedObjectContext への保存呼び出しの直後に、デッドロック情報を「__psynch_mutexwait + 26」として示します。

私は何か基本的なことを誤解しているかもしれない.. :(

詳細情報の編集: NSManagedObjectContext save への呼び出しを含む関数を呼び出すために、dispatch_get_main_queue() を呼び出します。メインスレッドで実行しているので、これでいいと思います。

MORE MORE INFO EDIT :頻繁に操作されているNSManagedObjectsのNSFetchedResultsコントローラーのテーブルビューをスクロールすることで、デッドロックをより速くトリガーできます。この場合、フェッチ要求でロックされます。

SELF-SOLUTION EDIT : 問題は、2 つのスレッドで同時に FETCH 要求を実行していたことです。マルチスレッドの読み取りは問題ないという私の仮定は間違っていました。

4

0 に答える 0