私はフレームワークの使用について誤解をしていますNSURLSession
。そのため、AFFramework/Alamofire を使用せずに小さなアプリをゼロから作成することにしました。
ファイルをアップロードするために次の手順を必要とする API があります。
- POST ファイルのデータ
- 応答を取得 (JSON)
- いくつかの json フィールドを投稿します
api/save
私はそのような設定でバックグラウンドセッションを持っています:
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("myBackground")
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
私は2つの方法を実装しました:
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData)
すべてのデータを集計する場所
と
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?)
このデータを応答オブジェクトに変換します。私にとって非常に重要な場合、この応答オブジェクト。
アプリがフォアグラウンドにある間はすべて正常に動作しますが、バックグラウンドで問題があります。
ケース1
データのアップロードを開始した直後にアプリがクラッシュしました。WWDCによると、実装する必要があります
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void)
メソッドでこのハンドラを呼び出しますdidCompleteWithError
。しかし、このメソッドを呼び出す前にapi/save
、アップロード応答からのデータで呼び出す必要があります。このデータを取得するにはどうすればよいですか?
ケース 2
似たようなケースがほとんどです。アップロードの進行中にユーザーがアプリを停止しました。セッションが私のタスクで動作している間、アプリは数秒でロードされます。セッションが呼び出されるようdidReceiveData
になりましたが、もちろん、一部のデータが欠落しています。このような場合はどうすればよいですか?応答データを復元する方法は?