私は現在、位置追跡と位置に関するデータのサーバーへの送信に依存するアプリケーションを作成しています。ただし、問題は、24 時間年中無休で実行する必要があり、現在、2 ~ 3 日ごとにランダムなクラッシュが発生することです。アプリケーションを常にバックグラウンドで実行するために行ったことは、applicationDidEnterBackground メソッドのすぐ横にある beginBackgroundTaskWithExpirationHandler メソッドに NSTimer を配置することです。タイマーは毎分実行され、位置情報サービスを停止/開始します。
コードは基本的に次のようになります。
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTaskId = 0;
bgTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 1 * 60.0 target: self selector: @selector(onTick) userInfo: nil repeats: YES];
[t fire];
if (bgTaskId != UIBackgroundTaskInvalid){
[app endBackgroundTask: bgTaskId];
bgTaskId = UIBackgroundTaskInvalid;
}
}];
接続の目的でGCDAsyncSocketsを使用しています。各呼び出しのタイムアウトは約 30 秒です。
私は本当にアイデアがありません。クラッシュが発生する理由は何ですか?