1

のインスタンスを介して、サーバーからリクエスタに息子ファイルのダウンロードを報告しようとしていますNSProgress。ただし、 と の値を設定するtotalUnitCountcompletedUnitCount、これらは単に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どこでも同じインスタンスを使用しています!

4

0 に答える 0