バックグラウンドでオブジェクトをアップロードできるようにURLSessionDelegate
、 、URLSessionTaskDelegate
、およびを (ほぼ) 正常に実装しました。URLSessionDataDelegate
しかし、サーバーが戻ったときに送信したオブジェクトを削除できるように、完了ハンドラーを実装する方法がわかりませんstatuscode=200
私は現在、uploadTask
このように始めます
let configuration = URLSessionConfiguration.background(withIdentifier: "com.example.myObject\(myObject.id)")
let backgroundSession = URLSession(configuration: configuration,
delegate: CustomDelegate.sharedInstance,
delegateQueue: nil)
let url: NSURL = NSURL(string: "https://www.myurl.com")!
let urlRequest = NSMutableURLRequest(url: url as URL)
urlRequest.httpMethod = "POST"
urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let uploadTask = backgroundSession.uploadTask(with: urlRequest as URLRequest, fromFile: path)
uploadTask.resume()
の初期化にクロージャを追加しようとしましたuploadTask
が、xcode はそれが不可能であるというエラーを表示しました。
カスタム クラス CustomDelegate があります。
class CustomDelegate : NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDataDelegate {
static var sharedInstance = CustomDelegate()
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
print("\(session.configuration.identifier!) received data: \(data)")
do {
let parsedData = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:Any]
let status = parsedData["status"] as! NSDictionary
let statusCode = status["httpCode"] as! Int
switch statusCode {
case 200:
// Do something
case 400:
// Do something
case 401:
// Do something
case 403:
// Do something
default:
// Do something
}
}
catch {
print("Error parsing response")
}
}
}
また、デリゲートの他の関数も実装します。
私が欲しいのは、アップロードが完了したことをどうにかして知って、UI とデータベースを更新できるようにすることですCustomDelegate
。