バックグラウンド
アプリでUKCrashReporterを使用しています。
独自のUncaughtExceptionHandlerをインストールしました。
applicationDidFinishLaunching(1)でオブジェクトactiveItemControllerのmanagedObjectContextを設定しています
問題
managedObjectContextメソッドが例外をスローした場合、クラッシュレポーターダイアログボックスはアプリがクラッシュする前にのみ点滅するため、ユーザーがクラッシュを報告することはありません。
ウィンドウが表示されている間ではなく、クラッシュが報告された後にのみアプリを続行したい。
私が試したこと
UKCrashReporterCheckForCrash()がObjective Cメソッドである場合、performSelectorOnMainThread:waitUntilDone:YESを呼び出すことができると思いますが、そうではありません。
条件付きロックを使用してアプリを一時停止することに関する他のスタックオーバーフローの質問をいくつか見てきましたが、C関数にどのように使用するか理解できません。
どうすればこれをうまくやることができますか?何かアドバイスはありますか?どんな回答でも大歓迎です。
コード
// In app delegate
-(void)applicationWillFinishLaunching:(NSNotification *)aNotification {
UKCrashReporterCheckForCrash(); // A C function which then creates a window if
// it detects a crash has happened.
}
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[activeItemController setMoContextDisk:[self managedObjectContext]];
[activeItemController setMoContextMemory:[self managedObjectContextMemory]];
}
アップデート1
私がやろうとしていることの詳細を尋ねられたので、ここに行きます。
この考えを引き起こしたバグは、managedObjectModelsをマージするときの例外でした。私のアプリは、数ミリ秒ごとにコンソールに「Uncaughtexception」を出力するループに巻き込まれました。
そして、この例外が発生する前にキャッチされなかった例外ハンドラーをインストールすると、説明されている動作が得られます。アプリが起動し、クラッシュレポートダイアログが短時間表示された後、読み込みを続けて再度クラッシュします。
まとめ-起動時に発生するエラーを処理できるようにしたい。
(1)バインディングはクラスのテストをより問題にするだろうと思ったので、これを行うためにバインディングを使用していません。