加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

uploadTask使用Swift中的AFNetworking进度

发布时间:2020-12-14 04:27:07 所属栏目:百科 来源:网络整理
导读:我正在尝试将NSProgress与AFNetworking一起使用,这是我正在使用的代码 //func upload...//...let request: NSMutableURLRequest = AFHTTPRequestSerializer().multipartFormRequestWithMethod("POST",URLString: url,parameters: s3parameters,constructingB
我正在尝试将NSProgress与AFNetworking一起使用,这是我正在使用的代码

//func upload...
//...
let request: NSMutableURLRequest = AFHTTPRequestSerializer().multipartFormRequestWithMethod("POST",URLString: url,parameters: s3parameters,constructingBodyWithBlock: { formData in
      let data: AFMultipartFormData = formData
      data.appendPartWithFileURL(fileURL,name: "file",error: nil)
    },error: nil)
    request.setValue("application/json",forHTTPHeaderField: "Accept")

    let sessionManager: AFURLSessionManager = AFURLSessionManager(sessionConfiguration: NSURLSessionConfiguration.defaultSessionConfiguration())
    var progress: NSProgress?

    let uploadTask: NSURLSessionUploadTask = sessionManager.uploadTaskWithStreamedRequest(request,progress: &progress,completionHandler: { (response,responSEObject,error) in
    //...
    })

    uploadTask.resume()
    progress?.addObserver(self,forKeyPath: "fractionCompleted",options: NSKeyValueObservingOptions.Initial,context: nil)
//...

override func observeValueForKeyPath(keyPath: String,ofObject object: AnyObject,change: [NSObject : AnyObject],context: UnsafeMutablePointer<Void>) {
  let progress: NSProgress = object as NSProgress
  println("progress: (progress.fractionCompleted)")
}

文件是正确上传的,但事实并非如此 – 我只打印了一次进度值(“progress:0.0”),然后我以AFURLSessionManager.m中的EXC_BAD_ACCESS结束:

#pragma mark - NSURLSessionTaskDelegate

- (void)URLSession:(__unused NSURLSession *)session
          task:(__unused NSURLSessionTask *)task
didSendBodyData:(__unused int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
    self.progress.totalUnitCount = totalBytesExpectedToSend; <<< EXC_BAD_ACCESS
    self.progress.completedUnitCount = totalBytesSent;
}

我究竟做错了什么?我应该设置“var progress:NSProgress?”不同还是还有别的东西我不见了?

解决方法

哦,我已经修好了 – 我需要从进度中移除观察者:

let uploadTask: NSURLSessionUploadTask = sessionManager.uploadTaskWithStreamedRequest(request,error) in
//...
progress?.removeObserver(self,context: nil) // added this line
//...
})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读