内部から NSManagedObjectContext -save: 次のメッセージが表示されます:
アサーションが失敗しました: (_Unwind_SjLj_Resume() can't return)、関数 _Unwind_SjLj_Resume、ファイル /SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c、326 行目。
プログラム受信信号:「SIGABRT」。
警告: /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib のシンボルを読み取れません (ファイルが見つかりません)。
これは、Data と対 1 を持つ Sample と to-man を持つ Run と to-man を持つ Experiment オブジェクトを削除すると発生します。また、Experiment には to-many と to-many があり、to-many には to-many があり、Display には to-many があります。グラフの周期的な性質を指摘するためにこれに言及します。モデルの単純化されたグラフは次のとおりです。
ユーザーが操作する最上位のエンティティを実験します。Experiment には、複数の Run オブジェクトが含まれます。Run は、特定の時刻に開始し、後で終了するデータのコレクションです。データは複数のソースから同時に収集できるため、実行ごとにソースごとにサンプルがあります。実験にはデータが含まれており、このデータを表示して操作する必要があります。したがって、各実験にはいくつかのページ オブジェクトがあり、各ページにはいくつかのディスプレイ (グラフ、メーターなど) が含まれます。ディスプレイは、実験に属する実行のサブセットを表示するように構成されています。そのため、Experiment には数十の実行が含まれる場合がありますが、そのページの 1 つは一度にそれらの実行のいくつかしか表示しません。表示エンティティは、このリストを維持します。ディスプレイはそうではありませんビュー。ビューは Display オブジェクトを参照し、Display オブジェクトへの変更が通知されます。
以前は削除規則を使用していましたが、これらすべてのクラスの -prepareForDeletion メソッドと組み合わせて「アクションなし」の削除規則に切り替えました。この変更は違いはありませんでした。どちらの場合も、エラー メッセージは同じです。
興味深いことに、アプリを再起動すると、削除対象としてマークされたすべてのオブジェクトが削除されています。
また、Experiment に Run オブジェクトがない場合、削除は問題なく機能します。さらに言えば、Experiment から 1 つの Run を削除することもできます。
誰かがこのようなことを見て、何が原因であるかについてアドバイスを提供できることを願っています. または、iOS 4.2.1 用の libXcodeDebuggerSupport.dylib の入手方法に関するアドバイスがあれば、それも役立つかもしれません。
更新:ここにあるアドバイスに従い、Xcode で iOS 4.2.1 の libXcodeDebuggerSupport.dylib を見つけることができました。しかし、これは問題の診断にはまったく役立ちませんでした-これは持続します。
更新 2: unwind-sjlj.c のバージョンを少し読んでダウンロードした後、キャッチされない例外のようなものを扱っているようです。これがどのように役立つかわかりません...
更新 3:カムチャッカのおかげで、おそらく数日前にすべきだったことを実行しました。「Objective-C の例外で停止する」をオンにしました。これにより、削除されたオブジェクトへの参照がまだ保持されていることがわかりました。さらに悪いことに、削除されたオブジェクトを観察しているキー値でした。この修正された問題を修正すると、-prepareForDeletion メソッドではなく削除ルールを使用するように戻すことができました。