問題タブ [nsurlsessiondownloadtask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1039 参照

ios - デリゲートを呼び出さずに NSURLSession ダウンロードを再開する

NSURLSession に関連するアプリでの奇妙な動作に気付きました。

バックグラウンド構成で NSURLSession を使用してダウンロードを開始すると、ダウンロードは問題なく開始されますが、ある時点で、明らかにランダムで、数秒間停止し、他のデリゲートを呼び出さずに再起動します

リセットされたバイト数で。

誰が何が起こっているのか教えてもらえますか?

セッションを初期化する方法は次のとおりです

- 編集 -

私はRobの提案に従い、CharlesとxCodeデバッガーを使用して、物事が起こる順序は次のとおりであることがわかりました:

  1. セッションを作成
  2. を呼び出しますgetTasksWithCompletionHandler。セッションにはタスクがありません
  3. ダウンロード タスクを開始します
  4. デリゲートURLSession:didReceiveChallenge:completionHandler:が呼び出され、完了ハンドラを呼び出しますcompletionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
  5. デリゲートからのログはdidWriteData:、ID 1 のダウンロード タスクがデータをダウンロード中であることを示し、ダウンロードは Charles のステータスを受信応答本文で示します
  6. ランダムな時点で、Charles のダウンロード ステータスが [完了] に変わり、新しいダウンロードが開始されたことを確認できます。
  7. デリゲートURLSession:didReceiveChallenge:completionHandler:が呼び出され、完了ハンドラを呼び出しますcompletionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
  8. デリゲートからのログはdidWriteData:、ID 2 のダウンロード タスクがデータをダウンロード中であることを示しています。新しいダウンロードは、Charles にステータス受信応答本文で表示されます。
0 投票する
1 に答える
1019 参照

ios - NSURLSession ダウンロード タスクは、デフォルトのセッション構成でデバッグ中にメモリを増やします

NSURLSessioniOS 7 以降を使用してファイルをダウンロードするアプリがあります。次のようにタスクを開始します。

完了ハンドラー ( URLSession:downloadTask:didFinishDownloadingToURL:) で、ファイルをアプリケーション データ フォルダーに移動invalidateAndCancelし、セッションで呼び出します。プログレス ハンドラー ( didWriteData:totalBytesWritten:totalBytesExpectedToWrite:) では、進行状況をログに記録するだけです。

これがデバッグで実行されると、メモリ使用量が急速に増加し、ダウンロードされたデータ量の数倍になります。ただし、バックグラウンド タスクで実行すると、メモリ使用量は一定になります。

ダウンロード タスクで既定のセッション構成を使用するのはよくありませんか? 設定すべきキャッシュ プロパティはありますか? 何が起きてる?

更新:私が知る限り、これはデバッガーが接続されている場合にのみ発生します。デバッガーを使用せずにシミュレーターで起動すると、アクティビティ モニターでメモリ使用量の増加が見られません。

更新 2:これは iOS 8.3 で修正されたようです。わーい!

0 投票する
2 に答える
1256 参照

ios - NSURLSessionを使用して、ダウンロードタスクのキャンセル時に受信データまたは一時ファイルの場所を取得する方法

を使用して複数のファイルをダウンロードしていますが、ダウンロードタスクNSURLSessionをキャンセルしてもダウンロードしたデータを保存し、再開時に残りのデータのダウンロードを開始したいです。じぶんの

が呼び出されていません。

ダウンロードするマイコード:

0 投票する
1 に答える
1919 参照

objective-c - NSURLSession downloadTask がメモリを解放しない

顧客はサーバーに短時間で数回のダウンロードを実装することができず、非常に多くのファイル (500-1000 のダウンロード) がある場合、backgroundDownloadTaks は非常に一貫性がなかったため、バックグラウンド NSURLSession なしで NSURLDownloadTask を使用することにしました。

大量のファイルで問題なく機能しますが、不便な点があります。メモリの警告が表示されるまで、メモリ使用量は常に増加しています。取得したら、保留中のタスクをキャンセルして NSURLCache を解放しますが、メモリは解放されないため、ダウンロードを再開すると同じメモリ警告が表示されます。

タスクをキャンセルするために cancelWithResumeData を使用していません。

これは私のコードです

そして、これらはメモリ使用量の 2 つのスナップショットです

ファイルのダウンロード時に増加するメモリ使用量 ファイルのダウンロード時に増加するメモリ使用量

ダウンロード タスクは停止しますが、メモリは解放されません ダウンロード タスクは停止しますが、メモリは解放されません

メモリを解放できないのはなぜですか?

助けてくれてありがとう

0 投票する
1 に答える
514 参照

ios - AFNetworking でダウンロードの進行状況を取得できません

次のコードを使用して、AFNetworking 2.0 を使用してファイルをダウンロードしようとしています。

// 進捗のためにここにオブザーバーを追加します

observeValueForKeyPathそして、これがメソッドからの NSLog です

ご覧のとおり、合計ユニット数は-1です。その結果、私fractionCompletedは 0 だと思い、UI を更新できません。私が犯している間違いは何ですか?

これを参考にしました。 AFNetworking 2.0 でダウンロードの進行状況を取得するには?

また、このスレッドで同様の議論が行われていますが、その理由を理解できませんでした。 https://github.com/AFNetworking/AFNetworking/issues/1398

編集

応答ヘッダーの投稿

0 投票する
1 に答える
941 参照

ios - バックグラウンドで NSURLSessionDownloadTask を使用しているときにディスク容量が不足するとどうなりますか?

iOS 8.1 アプリNSURLSessionDownloadTaskでは、バックグラウンドでアーカイブをダウンロードするために使用していますが、これは非常に大きくなることがあります。

すべて正常に動作しますが、電話のディスク容量が不足するとどうなりますか? ダウンロードが失敗し、それがディスク容量の残りの問題であったことを示しますか? 事前に確認する良い方法はありますか?