6

メモリ不足、メモリ リークなどの一般的なクラッシュによるクラッシュ時にアプリが終了したときに、サーバーと何らかの対話を行いたいと考えています。知りたいのですが、このシナリオで呼び出されるデリゲートメソッドはありますか?これにより、クラッシュによりアプリが終了する直前にサーバーにすばやく接続できます。

ありがとうございました。

4

2 に答える 2

9

あなたが説明したように、サーバーを親密にする必要があるため、クラッシュのためにアプリが終了する直前にサーバーに接続できます。

その場合、通知を受け取るように設定する必要がexception handlerありますexception

これを行う方法を参照してください

このNSSetUncaughtExceptionHandler (&uncaughtExceptionHandler)コード行をクラスapplicationDidFixnishLaunchinのメソッドに記述しますAppdelegate

 -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:  
  (NSDictionary*)launchOptions
 {   
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

   EDIT:
   if( [[NSUserDefaults standardUserDefaults] boolForKey:@"isExceptionOccured"])
   {
    //call sever code here
    [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"isExceptionOccured"];
   }
   //rest of your code
 }


 void uncaughtExceptionHandler(NSException *exception)
  {


  NSLog(@"Exception Got %@",[exception description]);
  //do what ever you what here 
  //can save any `bool` so that as aaplication  run on immediate next launching of crash
  //could intimate any thing

  EDIT: 

  [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isExceptionOccured"];

  }
于 2013-05-02T05:16:12.653 に答える
3

エラーをキャッチするために、独自の例外ハンドラーを追加します。

最初に例外メソッドを定義します。

void uncaughtExceptionHandler(NSException *exception) {
    // You code here, you app will already be unload so you can only see what went wrong.
}

次に、例外ハンドラーを使用するようにアプリに指示します。

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    // The rest if you code  ....
}

それがあなたを助けることを願っています。

于 2013-05-02T05:09:31.547 に答える