iOS開発学習のモニタリングプログラムの崩壊回数詳細


前言
この記事では、iOSがどのようにプログラムの崩壊回数を監視しているかに関する内容を紹介します。
コードを書く前に、まずアプリの流れを分かります。
プログラム運転起動時に順次呼び出します。
      1.スタートページを先に実行する
      2.- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions      3.- (void)applicationDidBecomeActive:(UIApplication*)applicationプログラムをバックグラウンドに戻して順次呼び出します。
      1.- (void)applicationWillResignActive:(UIApplication*)application      2.- (void)applicationDidEnterBackground:(UIApplication*)applicationプログラムはバックグラウンドからフロントに戻り、順次呼び出します。
      1.- (void)applicationWillEnterForeground:(UIApplication*)application      2.- (void)applicationDidBecomeActive:(UIApplication*)applicationプログラムが殺されたら順番に呼び出します。
      1.- (void)applicationWillResignActive:(UIApplication*)application      2.- (void)applicationDidEnterBackground:(UIApplication*)application      3.- (void)applicationWillTerminate:(UIApplication*)applicationプログラムがクラッシュしてフラッシュバックしたら何の方法も起動しません。
プログラムの破壊と破壊の違いによって、プログラムの崩壊回数を検出し記録する方法を書くことができます。
構想を実現する
プログラムを起動する時に、砂箱に格納されているクラッシュマークのisCrashをYESにして、プログラムが終了する時にisCrshをNOにします。
コード:
プログラム起動

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

 [self recordCrashCount];

}
プログラム終了

- (void)applicationWillTerminate:(UIApplication *)application {

 [[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:@"JJ_isCrash"];
 [[NSUserDefaults standardUserDefaults] synchronize];
}

//           

- (void)recordCrashCount{

 BOOL isCrash = [[[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_isCrash"] boolValue];

 [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"JJ_isCrash"];

 if (isCrash == YES) {

  //            
  NSNumber *crashNum = [[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_crashCount"];

  NSInteger count =0;

  if (crashNum != nil) {

   count = [crashNum integerValue];

  }

  count++;

  //                

  if (count >= crashCount) {

   NSLog(@"    ");

   //             0
   [[NSUserDefaults standardUserDefaults] setObject:@0 forKey:@"JJ_crashCount"];

   // 5          
   [self performSelector:@selector(showAlertAction)withObject:nil afterDelay:5];
   return;
  }

  //       3           
  crashNum = [NSNumber numberWithInteger:count];
  [[NSUserDefaults standardUserDefaults] setObject:crashNum forKey:@"JJ_crashCount"];
 }
}

//       

- (void)showAlertAction{

UIAlertController*alert

=

[UIAlertControlleralertControllerWithTitle:@"  "message:@"           ,            !" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction*sure = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleDefaulthandler:nil];

[alert addAction:sure];

[self.window.rootViewController presentViewController:alert animated:YES completion:nil];

}
皆さんが直接使用できるように、コードを小さいフレームに入れました。コード一つで起動できます。
githubダウンロードアドレス:https://github.com/jiangbin1993/JJRecordCrash
ローカルダウンロードアドレス:http://xiazai.jb51.net/201707/yuanma/JJRecordCrash(jb 51.net)rar
使用方法:
appdelegate.mにヘッダファイルを導入する

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

 //   crashCount         block    
 [[JJRecordCrash shareInstance] recordCrashWithCrashCount:2 handle:^{
  //                , :           
  NSLog(@"   ");
 }];

 return YES;
}
注意:デバッグ時に、プログラム運転中に直接xcodeを使ってプログラムを再起動します。- (void)applicationWillTerminate:(UIApplication*)applicationの方法がないので、かなり崩れてしまいます。同様に記録されます。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらすことを願っています。もし疑問があれば、メッセージを残して交流してください。ありがとうございます。