Я пытаюсь использовать NSProgress с AFNetworking, это код, я используюuploadTask с прогрессом, используя AFNetworking в Swift
//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)")
}
Файл загружается правильно, но это не так - я только получение значения прогресса напечатанный один раз («прогресс: 0.0»), а затем я заканчивая EXC_BAD_ACCESS внутри AFURLSessionManager.m:
#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: NSProgress»? по-другому или есть что-то еще, что мне не хватает?