問題タブ [nsurlsessiontask]
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.
ios - NSURLSessionDataTask を使用して、ユーザーがアプリを終了した後に戻ってきた場合でも、ファイルのダウンロードを再開できますか?
NSURLSessionDownloadTask
orを使用して 300 MB のファイルをダウンロードしているとしますNSURLSessionDataTask
(現時点では、私の場合はどれが最適な選択かわかりません)。ユーザーがアプリを終了するか、250 MB のダウンロード中にアプリが突然クラッシュしました。次回、ユーザーがアプリを開いたときに、250 MB からダウンロードを再開する必要があります。
を使用してデモを作成しましたNSURLSessionDownloadTask
。ただし、 を使用している場合は、ダウンロードが完了するまで一時ファイルにNSURLSessionDownloadTask
アクセスできません(この一時ファイルを永続的な最終的な場所に移動します)。NSURL
didFinishDownloadingToURL
私は、NSURLSessionDataTask
ではなく を使用しDownloadTask
、次にデリゲート メソッドを使用する必要があることを知りましたNSURLSessionDataDelegate
。
これにより、受信したデータにアクセスできるようになります。しかし、これからどうやって物事を管理するのかわかりません。上記のデリゲートにデータを追加し、ディスクのどこかに書き込むことができるようにする方法が必要です。2 番目の質問です。データのダウンロードがここからのみ (つまり 250 MB から) 開始されることをどのように知ることができますか?
それは本当に実現可能ですか?または、アプリがアクティブな状態の場合にのみ実行可能ですか?
私はこの質問に必死です。
ios - post メソッド NSUrlSessionTask でデータを送信しようとすると、このエラーが発生しますか?
エラー:
エラー Domain=NSCocoaErrorDomain Code=3840 「JSON テキストが配列またはオブジェクトで始まっておらず、フラグメントを許可するオプションが設定されていません。」UserInfo={NSDebugDescription=JSON テキストが配列またはオブジェクトで始まっておらず、フラグメントを許可するオプションが設定されていません。}
これは私の予想されるjson応答です:
これは私のコードです:
post メソッドの文字列を nsdata に変換する:
私の他の post メソッドと get メソッドは、これが間違っていることを除いてすべて機能しています。
swift - NSURLSession の dataTaskWithRequest の合計応答時間の測定
NSURLSession の dataTaskWithRequest を使用する場合、多くの NSURLSessionDataTask が作成され、必ずしもすぐに実行されるとは限らない場合に、合計応答時間をどのように測定できますか? 開始時刻を保存し、ブロック内の差を計算しても、タスクが使用可能なスレッドを待っていた可能性がある時間は考慮されません。いいえ:
ios - iOS でのネットワーク速度の計算。データが少ない場合の往復時間では、正確なネットワーク速度がわかりません
アプリでネットワーク速度を計算しようとしているので、そのようなネットワーク条件でアップロードできる量のデータしかアップロードできません。そのための私の計画は次のとおりです。
- 私のアプリのデフォルト速度は (500KB/s) かもしれません。
- 私のアプリは、500kb のデータを持つリクエストを送信します。
- システムがデータをアップロードして応答を取得するのにかかる往復時間を監視します。たとえば、アプリが 5 秒で 200kb のデータを受信した場合、速度は (500+200)/5 になります。
- 上記の例によると、私の帯域幅はそのリクエストに対して 140KB/s です。
- 帯域幅から指数移動平均を計算します。
- 計算された平均帯域幅に基づいて、次のリクエストを送信します。
NSURLSession の実装は次のとおりです。
帯域幅を失うと、平均が下がるので、このアプローチを使用してそれを見つけることができますが、問題は、帯域幅が低くなり、ネットワーク状態が改善されるよりも、送信するデータが少なくなるため、帯域幅が改善されないことです。帯域幅が低いと言い続けます。
ネットワークの状態が改善され、より多くのデータを送信できるかどうかを確認する方法はありますか?
私の頭にある解決策の 1 つは、10 回のリクエストごとに最大データ (500KB かもしれません) を送信できるので、その時点でネットワーク状態が改善され、より高い帯域幅を取得できるということです。
ios - NSURLSession: cancelByProducingResumeData を呼び出した後、再開データを取得できません
ユーザーがダウンロードをキャンセルしたり、何か問題が発生したりした後に、ダウンロードを再開したい。しかし、cancelByProducingResumeData
メソッドを呼び出すresumeData
と、 nil
. そのため、ダウンロードを再開できません。私たちの PC クライアントはこのリンクのダウンロードを再開できるので、ダウンロード リンクを再開できると確信しています。これが私のコードです。これが完全なプロジェクトです。
ios - NSURLConnection+delegate を NSURLSession+delegate に置き換えますか?
まず第一に、同様の質問がたくさんありますが、それらはすべてNSURLSessionDataTask
完了ハンドラーを作成することに関するものです。私の場合NSURLConnection
、多くのデリゲート メソッドがあり、それを に置き換える必要がありNSURLSession
ます。
このリンクによると、デリゲート メソッドURLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:
が必要ですが、すべての例がデリゲートをまったく使用しない完了ハンドラー (成功または失敗のみ) を使用したタスクの作成に関するものであるため、その使用方法を理解できません。
ios - NSURLSessionResponseCancel でエラーが発生しますか?
私はNSURLConnection
オブジェクトを使用し、cancel
時々そのメソッドを呼び出しました。
ここで、NSURLConnection
->を置き換える必要がありNSURLSession
ます。メソッドNSURLSession
を持つタスクでも動作します。cancel
問題は-[NSURLConnection cancel]
リクエストの処理を停止することですが、使用する-[NSURLSessionTask cancel]
と「キャンセルエラー」が発生します。cancel
が手動で呼び出されたのか、それとも実際のエラーが発生したのかを適切に区別するにはどうすればよいでしょうか?
ios - NSURLSession バックグラウンド転送: キューからダウンロードされた各ビデオのコールバック
を使用して複数のビデオをダウンロードするために、バックグラウンド転送サービスを使用していNSURLSession
ます。アプリがバックグラウンド モードの場合、ダウンロードは正常に機能しており、満足しています。私の問題は、キューからダウンロードされた各ビデオのコールバックが必要なことです。
ダウンロードしたビデオごとに次のメソッドが呼び出されることを期待していました。
バックグラウンド転送後にアプリに送信するメッセージがシステムにない場合は、次の方法を使用します。
ただし、すべてのダウンロードが完了すると、両方のメソッドが呼び出されます。ダウンロード用に 3 つのビデオを配置し、アプリをバックグラウンドに置きます。3 つのビデオがすべてダウンロードされた後に、両方のメソッドが呼び出されました。
これらのメソッドで私がやっていることは次のとおりです。
AppDelegate
ダウンロードViewController
各ビデオのダウンロード時にユーザーにローカル通知を表示することは可能ですか? または、バックグラウンドですべての動画のダウンロードが完了するまで待つ必要がありますか?
答えがNOの場合、私の質問は、これら 2 つの異なるコールバックの目的は何ですか? それらを互いに分離するものは何ですか?