1

私は趣味のプロジェクトに取り組んでいますが、新しいことを学ぶために暇なときにゆっくりと更新しています。私が遭遇した障害の1つは、別のスレッドでCoreDataを操作することです。Core Dataの同時実行性に関するAppleのドキュメントを読みましたが、読んだ内容はすべて簡単に思えたので、読み込み中にUIをロックアウトしたくないので、バックグラウンドスレッドにデータを読み込むようにプロジェクトを更新し始めました。

Core Dataオブジェクトがメインスレッドにロードされている場合、プロジェクトは正常に機能します。バックグラウンドロードに切り替えるとクラッシュします。

この段階で、次のことを確認できます。

  • NSManagedObjectがスレッドにロードされ、そのプロパティにアクセスできます
  • stdoutへのデータの出力は正常に機能し、正しく見えます。
  • メインスレッドにロードされたデータオブジェクトとバックグラウンドスレッドにロードされたデータのバイナリ比較は、それらが同一であることを証明します。

実際の問題は、NSDataでカテゴリ実装を呼び出すときに発生します。NSDataオブジェクトがバックグラウンドスレッドにロードされたときに正常であることを確認できます。ロード後にNSDataオブジェクトに対して何らかの作業を行うために関数を呼び出した場合にのみ、問題が発生します。問題はEXC_BAD_ACCESSです。これは通常、オブジェクトのアドレスが間違っていることを意味しますが、まったく意味がありません。

私はおそらく何か明白なまたは単純な間違いを犯しているだけです-しかし、私はただ木の森を見ることができません。

それが私の狂気を駆り立てているので、あなたがこれについて何かアドバイスを提供できると思うなら、あなたはここでコードを見つけることができます:

投稿の回答を編集:プロジェクトが存在しなくなったため、URLを削除しました。

4

1 に答える 1

0

さて、私はついに問題が何であるかを知りました。解凍方法がスレッドのスタックサイズを超えていたため、奇妙でランダムなEXC_BAD_ACCESSが発生していました。

この場合、デバッガーがより直接的な手がかりを生成することを期待していました。

したがって、有効な「スタックオーバーフロー」の問題が解決されました。

于 2012-12-12T23:08:24.087 に答える