問題タブ [nsurlsessiondatatask]

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 投票する
2 に答える
1963 参照

ios8 - iOS8: NSURLSession: NSURLSessionDataTask 'クライアントは応答全体を受信する前に接続を閉じました'

iOS Background FETCH n Background TRANSFER を使用してアプリを更新します。

大量のファイルの大規模なダウンロードの一部として MP4 をダウンロードすると、ダウンロードが突然停止してエラーが発生することがあります。

「クライアントは応答全体を受信する前に接続を閉じました」

httpコードはまだ200です。

企業の携帯電話アカウントのためにデータに制限がなく、iPad に単一のアプリがあるため、管理者は、クリーン インストールで 20/30 を超える大量のデータとファイル数をダウンロードすることを望んでいます。それらは、毎日発行される企業のビデオ/ PDF です。

NSURLSession を作成しました

次に、mp4 または PDF への URL ごとに、NSURLSession から NSURLSessionDownloadTask を作成します。

各ダウンロード タスクで起動を再開します。すべてが返されたら NSURLSession が完了し、アプリが更新されたことを通知でユーザーに伝えます。

Mac で CHARLES PROXY を使用してダウンロードを監視しています。多くのファイルがあるため、しばらく時間がかかります。また、映画がストリーミングされているように見えるため、遅くなる可能性があることに気付きました. 通常、ダウンロードされたものをチェックし、最新のもののみをダウンロードしますが、多くのダウンロードを行うと、クリーン インストールと言うと、mp4 へのストリームが頻繁に停止することに気付きました。彼らは200コードを持っていますが、メッセージがあります

「クライアントは応答全体を受信する前に接続を閉じました」

NSURLSession の完了が停止し、同期が一種のハング状態になる可能性があるため、これを引き起こす可能性のある考えはありません。

画像: OK ダウンロード: ムービー ストリームとディスクに保存: 200: 完了

画像:OK ダウンロード: ムービー ストリームとディスクに保存: 200: 完了

画像: ダウンロードが突然停止する:

画像: ダウンロードが突然停止する: 画像: ダウンロードが突然停止する:

任意のアイデア: 私はバックグラウンド フェッチを使用しているため、メッセージ内のクライアントが iOS8 なのか私のアプリなのかわかりません。各 downloadtask が返された後、ドキュメントで tmp ファイルを mp4 にコピーして呼び出します

これらのダウンロード タスクの一部が失敗すると、セッションが終了せず、スタックすることに気付きます。別のフェッチを行うと、これらの古いダウンロード タスクと古いセッションがすべて取得されます。

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

ios - session.dataTaskWithURL が適切な順序で実行されていません

Web サービスを呼び出しています。そのメソッドでは、session.dataTaskWithURL がしばらくしてから呼び出されています。適切なスレッドで提供されていないと思いますか?

私のメソッド "session.dataTaskWithURL(url!, completionHandler: {(data, response, error) in " を適切な順序で実行できるかどうか助けてください。よろしくお願いします。

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

objective-c - NSURLSessionDataTask 応答を SQLite データベースに保存しますか?

私のコードはHTTPリモート サーバーへのポスト コールを呼び出し、JSON形式で結果を取得します。この JSON を抽出しましたが、これらの結果を SQLite に保存する必要があります。私の読書に基づくと、NSURLSessionDataTaskバックグラウンド スレッドなので、私の混乱は、SQL を開いて内部に挿入する必要completionHandlerがあります (または) このタイプの要件を処理するための他のベスト プラクティスはありますか?

編集1

私がもっと苦労している点は、「completionHandler」内にSQLite操作を書くことは有効ですか? 「completionHandler」は、別のスレッド(SessionDataTaskを実行している)またはメインスレッドのメソッドと見なされますか?

編集2

私は CoreData 関連のソリューションにもオープンです。

どんな助けでも大歓迎です。

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

ios - NSURLSessionTask 認証チャレンジの完了ハンドラーと NSURLAuthenticationChallenge クライアント

カスタム を実装しており、内部ネットワークのデータ タスクで の代わりにNSURLProtocol使用したいと考えています。NSURLSessionNSURLConnection

NSURLSession/のチャレンジ ハンドラの内部実装について興味深い問題に遭遇しましたNSURLSessionTask

ここでは、基本的に 2 つの異なるチャレンジ ハンドラーが提供されます。1 つは、チャレンジを処理するために必要なすべての情報が提供されるブロックですが、情報オプションとほぼ 1 対 1 で対応するメソッドを持つcompletionHandlerレガシーもあります。NSURLAuthenticationChallenge.clientcompletionHandler

私はプロトコルを開発しており、特定の認証チャレンジを URL ローディング システムに渡して呼び出し側 API を実装したいので、NSURLSessionクライアント メソッドを使用する必要があります。

completionHandler私の質問は、 andの内部実装がNSURLAuthenticationChallenge.client同じかどうかです。もしそうなら、URL 読み込みシステムが適切なメソッドを呼び出すことを期待して、デリゲート メソッドで完了ハンドラーの呼び出しをスキップできますNSURLAuthenticationChallenge.clientか?

0 投票する
0 に答える
405 参照

rest - 再承認後に NSURLSessionDataTask リクエストを再試行します (AKA NSInvocation は Swift で同等です)。

NSInvocationTL;DR バージョン: Swift で引数を含むメソッド呼び出しをパッケージ化するための最も近い同等または同様の方法は何ですか?

背景: ServerControllerAPI へのリクエストを行うためにアプリ全体で使用されるオブジェクトがあります。この方法で魔法が起こります。

定期的に API リクエストが 401 で失敗し、通知としてアプリでブロードキャストされます。これは、多くの関係者がリクエストにもう少し時間がかかるという事実に関心があるためです。別の API 要求を使用してアプリ トークンを更新すると、他の API 要求が再び機能し始めます。

これは私が助けを必要としている部分です:次に、再認証後に元の API リクエストを繰り返す必要があります。

以前の Objective-C では、NSInvocationオブジェクトを使用して元のメソッド呼び出しをパッケージ化していた可能性がありますが、これは Swift では利用できないため、より Swift に似たアプローチが必要であると考えています。しかし、私はまだそれを理解することができませんでした。

これまでに思いついた最善のアプローチは次のとおりです。

  • への参照とともに引数をディクショナリに入れ、それらをパラメータServerControllerとして通知に渡しますobject:
  • 通知オブザーバーで (再承認の完了後)、引数を辞書から取り出し、同じメソッドを手動で再度呼び出して要求を繰り返します。

これは次善の解決策のように思われ、より良い方法が必要です。

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

ios - jsonArray を POST データとして送信する IOS

こんにちは、json配列を投稿データとして送信する小さなIOSアプリケーションを開発しています。次の方法で試しました:

このようなログレコードを取得しました

ステータスコードはゼロになり、エラーは何かの後のリクエストタイムアウトです。

これが、json配列データをサーバーに送信しようとした私のシナリオです。しばらくしてから API 呼び出しを開始すると、ステータス コードがゼロになり、タイムアウト エラーが要求されます。しかし、主なことは、サーバー上のデータを更新していることです。次に、ステータスコードゼロでエラーが発生する理由。私が間違っていることや欠けていることはありますか。そのエラーを出し続けます。何かNSURLSessionConfigurationだからでしょうか。

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

objective-c - 3 つのメソッドを 1 つずつ実行する

API(NSURLSessionDataTask async)を呼び出す別のスレッドで3つのメソッドを次々に実行する必要があります。ディスパッチ グループを調査しましたが、これはメソッド 1 と 2 を同時に実行し、終了時にメソッド 3 を実行するようです。

メソッド 1 を実行するために必要であり、それが完了したらメソッド 2 を実行し、それが完了したら最後にメソッド 3 を実行します (メソッドをキューに入れます)。

各補完でメソッドを連鎖させて次を実行できることはわかっていますが、これにはより良いアプローチがあると思いました...何かアイデアはありますか?

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

ios - performSelector を使用した NSURLSession:

iOS は、アプリケーションがバックグラウンド モード (最小化) の場合でも最大 10 分でプロセスを実行できることがわかりました。これを回避して永久に実行するには、次のことが必要です。

新しいコンテンツを定期的にダウンロードして処理する必要があるアプリ

そして、それが NSURLSession API を使用してサーバーにリクエストを行うことです:

アプリが最小化されている場合でもプロセスを実行するには、いくつかのタグを使用する必要があることを知っている人もいますが、API NSURLSession を使用している場合、このようなことは必要ありませんよね?

私のプロジェクトの場合、彼は私のサーバーで 1 時間ごとにそのような要求を行う必要があり、このために、ブロックの completionHandler 内にコードを追加しました。サーバ。

私の質問は: 10 分の時間は、3600 秒の遅延でセレクターに影響を与える可能性がありますか? アプリが完全にダウンしていて、サーバーにファイルを送信できない原因は何ですか?