0

最近、iOS 7 で利用できる新しい NSURLSession を使用して最初のプロジェクトを完了しました。

NSURLSession の API 全体を探索するアプリを作成し、あらゆる種類のタスクを実装しました。 - データ タスク - ダウンロード タスク - アップロード タスク

また、バックグラウンド セッションを使用してバックグラウンド アップロードを実装しました。何時間ものデバッグと試行錯誤の実装の後、私は最終的にアプリ全体が問題なく動作するポイントに到達しました。私はそれを少数のテスター (< 5) にリリースしましたが、そのうちの何人かは、再現も追跡もできないようなバグに遭遇しました。

私のコードの特定の部分 - いくつかの無関係な操作の後 - バックグラウンド セッションで利用可能な現在のアップロード タスクを再開する責任があります。

    [[appDelegate getNSURLSessionForBackgroundTransfers] getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
    for(NSURLSessionUploadTask *task in uploadTasks) {
        [task resume];
    }

時々、アプリがクラッシュし、ログに次の例外が記録されます (ホッケー アプリを使用しています)。

シグセグ

の上:

0   libdispatch.dylib                   0x3ba87772 _dispatch_async_f + 10
1   CFNetwork                           0x30a5b86f -[__NSCFBackgroundSessionTask _onqueue_connection_resume] + 92
2   Memoir Beta                         0x00231e85 __55-[PhotoBinariesUploader runCodeEvenIfBackgroundMode:]_block_invoke_3 (PhotoBinariesUploader.m:553)
3   CFNetwork                           0x30a848c5 __50-[__NSCFURLSession getTasksWithCompletionHandler:]_block_invoke246 + 14

何か案は ?それが何であるかについてのヒントはありますか?

前もって感謝します!ぜ

4

1 に答える 1

4

iOS 7.1 から同じ問題が発生しました。状態 NSURLSessionTaskStateCompleted のタスクで resume を呼び出すと、クラッシュが発生します (おそらく NSURLSessionTaskStateCanceling も)。iOS 7 では履歴書が無視されていたため、これは iOS 7.1 で導入されたバグだと思います。

私がしたことは次のとおりです。

  if (task.state == NSURLSessionTaskStateSuspended) {
    [task resume];
  }

これにより、クラッシュの発生を防ぐことができます。いずれにせよ、中断されたタスクのみを再開できます。

iOS 7 で何ヶ月も問題なく動作し、今ではリリースされたアプリが多くのクラッシュを引き起こしているため、まだイライラしています。

于 2014-03-18T12:43:53.767 に答える