3

私はすでにCrittercismを使用しているiOSアプリを持っています。例外を完全に報告します。

私の問題は、これらの例外もバックエンドサーバーに記録することです。

私はそれを実現するために多くのことを試みましたが、役に立ちませんでした。これが私が試したもののリストです:

  • 電話 NSSetUncaughtExceptionHandler(&myExceptionHandler);

これを行うと、例外はCrittercismで報告されません。

  • 電話 NSSetUncaughtExceptionHandler(&myExceptionHandler);

例外をサーバーに送信します。次に、関数でCrittercismのコンストラクターを呼び出しmyExceptionHandler、例外を再スローします。動作しません。

  • Crittercismのコンストラクターを呼び出し、続いてNSSetUncaughtExceptionHandler(&myExceptionHandler);andをmyExceptionHandler呼び出します[Crittercism logHandledException:exception];。どちらも動作しません。

  • 私の例外ハンドラーでは、例外オブジェクトをシリアル化し、ユーザー設定に保存します。ユーザーがアプリを再起動したら、呼び出し[Crittercism logHandledException:exception];てから、例外をバックエンドサーバーに送信します。これに関する問題は、文字列を例外オブジェクトに逆シリアル化できなかったことです。スタックトレースをNSString形式で例外オブジェクトに入れることができませんでした。

私が試したかもしれないいくつかのこと:

  • crittercismに例外を処理させてから、次の再起動時crittercismDidCrashOnLastLoadに呼び出されます-しかし、例外情報が存在するのでしょうか、それともどこかからアクセスできますか?

  • 文字列を例外オブジェクトに逆シリアル化する必要がない場合があります。Crittercismも例外をjsonオブジェクトに変更し、このjsonオブジェクトをサーバーに送信していると思います。しかし、カスタムjsonオブジェクトをcrittercismに送信するために使用する関数を見つけることができません。

誰かが私に進め方を教えてもらえますか?

4

2 に答える 2

2

私はこれに対する解決策を見つけました。まず、を使用してcrittercismオブジェクトを初期化します

[Crittercism initWithAppID:crittercismAppID andKey:crittercismKey andSecret:crittercismSecret];

今定義する

NSUncaughtExceptionHandler* crittercismHandler = NSGetUncaughtExceptionHandler();//You have stored the reference to the crittercism function that was going to get called in the event of an exception

それで、

NSSetUncaughtExceptionHandler(&myHandledException);//Set the handler to your custom function

カスタム関数で、例外を除いてやりたいことをすべて実行してから、

NSSetUncaughtExceptionHandler(crittercismHandler);//this will re-set the exception handler to the one of crittercism

電話

crittercismHandler(exception);//This will send the exception to crittercism servers.

シグナルについても同様のことができます。

于 2013-02-15T07:09:18.650 に答える
1

私たちと同じように、独自の例外処理を管理できます。このページには、サンプルプロジェクトへのリンクがあります http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

これは、別のスレッドからスタックトレースを印刷する場合にも役立ちます

于 2012-10-18T01:16:46.743 に答える