のインスタンスを介して、サーバーからリクエスタに息子ファイルのダウンロードを報告しようとしています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
}
これが機能するかどうかを確認するために、fractionCompleted
プロパティに KVO を追加しました。このオブザーバーは、プロパティを更新するたびに起動completedUnitCount
しますが、progress オブジェクトの値をチェックインしても何も変更されていません。
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
見当がつかない.
事前にご協力いただきありがとうございます。
po progress
//編集: Swift ではデバッグが完全に壊れていて、デバッガーではできないという事実にもかかわらずdebugPrint()
、さまざまな場所で a を実行すると、次のような出力が得られます。
<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
どこでも同じインスタンスを使用しています!