NSProgress не обновляет свой totalUnitCount и завершил UnitCount
Я пытаюсь сообщить о загрузке файла сына с сервера запрашивающей стороне через экземпляр NSProgress
, Тем не менее, когда я установил totalUnitCount
а также completedUnitCount
значения, они просто не обновляются на NSProgress
объект.
Вот как я изначально создаю объект прогресса:
let progressUserInfo: [ String: String ] = [
NSProgressFileOperationKindKey: NSProgressFileOperationKindDownloading,
]
let progress = NSProgress(parent: nil, userInfo: progressUserInfo)
progress.kind = NSProgressKindFile
progress.totalUnitCount = -1
progress.completedUnitCount = 0
Затем я сохраняю экземпляр этого объекта прогресса в диспетчере загрузки, а также передаю его вызывающей стороне, которая запустила загрузку.
Теперь, когда я получаю ответ от сервера, я обновляю его следующим способом:
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
progress.totalUnitCount = response.expectedContentLength
completionHandler(.Allow)
}
Затем, каждый раз, когда я получаю кусок данных с сервера, я обновляю прогресс:
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
progress.totalUnitCount = dataTask.countOfBytesExpectedToReceive
progress.completedUnitCount = dataTask.countOfBytesReceived
}
Чтобы проверить, работает ли это, я добавил KVO для fractionCompleted
имущество. Этот наблюдатель срабатывает каждый раз, когда я обновляю completedUnitCount
Свойство, однако, при возврате значений в объекте выполнения ничего не изменилось:
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
let progress = object as NSProgress
println("loaded user: \(progress.localizedDescription) - \(progress.localizedAdditionalDescription) = \(progress.fractionCompleted)")
}
Это всегда выводит loaded user: Downloading files… - = 0.0
В настоящее время я понятия не имею, что здесь происходит, и если это какая-то быстрая проблема или неправильное использование NSProgress
апи.
Заранее спасибо за помощь!
// РЕДАКТИРОВАТЬ: Несмотря на то, что отладка полностью сломана для меня в Swift, и я не могу po progress
в отладчике, когда делаю debugPrint()
в разных местах вывод, который я получаю, следующий:
<NSProgress: 0x7f9473520f20> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of -1
<NSProgress: 0x7f9473520f20> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of -1
<NSProgress: 0x7f9473520f20> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of -1
Так что я определенно использую то же самое NSProgress
экземпляр везде!