問題タブ [nsurlsessionuploadtask]
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 - NSURLSession でデータをアップロードしていて、アプリが一時停止しているときにデータを保存するにはどうすればよいですか?
関係を持つエンティティをアップロードする必要があるアプリを開発しています。(ドロップボックスのファイルのアップロードに似ていると思います) このエンティティは と呼ばれPlaceEntity
、 と関係がありPictureEntity (to many)
ます。アプリが中断されNSURLSession
ている間にアップロードを処理するために使用したいと思います。だから、私がやっていることは、場所の写真を作成し、それらを開始することです. 画像をアップロードするたびに、データを受け取り、いくつかの情報を に保存する必要があります。すべての写真がアップロードされたら、新しいタスクを作成し、その場所をサーバーに保存します。uploadTasks
pictureEntity
私はそれをテストしましたがbackground and foreground
、すべて正常に動作します。問題は、アプリを一時停止するときです。アップロード画像リクエストが実行されます(Charles MAC OSアプリでリクエストを見ているので知っています)、core data
各アップロード後に の情報を更新する必要があるときに問題が発生します。メソッド:
アプリが完全に終了しているため、決して呼び出されません。その後、Core Data を更新したり、新しいリクエストを開始したりできません。
何か案が??
ありがとうございました
ios - 再起動後に 2 回呼び出される NSURLSession バックグラウンド アップロード完了メソッド
を使用NSURLSession
してファイルから画像をアップロードするために、バックグラウンド モードで使用してNSURLSessionUploadTask
おり、デリゲート コールバックを使用しています。ユーザーによって殺されるのではなく、アプリがバックグラウンドに残っている場合、これはすべて完全に正常に機能します。
ただし、保留中のアップロードがまだあり、アプリがホーム画面を使用して強制終了された場合、アプリが再起動され、アップロードされなかった画像が、同じバックグラウンド識別子を持つ新しい NSURLSession を使用してアップロード タスクとして再キューイングされると、何か非常に奇妙なことが起こります。 :
1) タスクは一度だけ作成され、それが発生したときにタスクの説明を割り当て、NSURLSession
セッションごとに一意のタスク識別子も割り当てます。私のNSURLSession
バックグラウンドはシングルトンです。
2) タスクは、次のエラーでほぼ即座に失敗します。
そして、完了デリゲート メソッドを呼び出します。
上記のエラーを渡します。この時点で、作成したタスクに一致するタスク識別子とタスクの説明を出力します。
NSURLSession
3) このすべてのタスクがほぼ即座に失敗した後、つまり事態がおかしくなり始めたとき、これらのすべてのタスクは何らかの形でコードに何もせずに再び に入れられます。決して失敗しません。2 回目は成功し、didCompleteWithError
今度はエラーなしで再度呼び出します。この時点で、タスクの説明とタスク識別子を出力すると、驚いたことに、割り当てた同じタスクの説明が返されますが、異なるタスク識別子が返されます! つまり、iOS は、失敗したと主張しているにもかかわらず、同じタスク識別子を使用してそのタスクを何らかの形で再作成し、再度キューに入れています。ネットワーク リクエストは Charles で 1 回しか確認できず、実際に失敗することはありません。
これは問題です。実際のアップロード エラーと iOS によって生成されたこの疑似エラーを区別できないためです。現在、これらのリクエストを明示的にキャンセルしていないため、キャンセルされたエラー コードを確認し、無視することを選択しています。タスクが魔法のように再キューされることを知っています。これは私には明らかなバグのように思えますが、いつでも再現できます。
回避策を講じると、すべてが期待どおりに機能しますが、これはハックであり、ある時点で実際のキャンセルを無視し、リクエストが実際に失敗したことをクライアントに通知しない可能性があると想像できます。
オンラインでこの問題について説明している人を数人しか見つけていませんが、回答はありません。
これに対して提出されたレーダーはありますか?これを防ぐ方法はありますか?
8.1 SDK を使用しています。
ios - ios8: NSURLSession を使用してバックグラウンドで何百枚もの写真をアップロードするにはどうすればよいですか? 空き容量の問題
写真アプリは、バックグラウンドで CameraRoll からすべてをアップロードする方法を教えてください。
日付範囲に基づいて、バックグラウンドで数百枚の写真をアップロードする必要があります。私のアプリは現在NSURLSession
、次のコードを使用しています(私は思う...)しかし、これが機能するには、タスクスケジューラがJPGをアプリストレージのファイルにコピーする必要があります(iOS8でNSUrlSessionを使用したストリームリクエストによるバックグラウンドアップロードを参照) 。アプリはバックグラウンドになります。数百枚の写真の場合、これには時間とストレージがかかりすぎます。
「ストリーム」アプローチを使用する方法、またはNSURLSession
バックグラウンドから追加のタスクを確実にスケジュールする方法はありますか? 私の開発者によると、iCloud にある可能性のある CameraRoll の写真が原因で、バックグラウンド スケジューリングが失敗する可能性があります。
ios - NSURLUploadTask を再利用する
ファイルをアップロードするための次のコードがあります。
2 回目の読み込みで、次のエラーが表示されます。
識別子 < ID > のバックグラウンド URLSession は既に存在します!
を再利用するにはどうすればよいURLSession
ですか?
ios - アプリがバックグラウンドに移行すると、バックグラウンド セッションの NSURLSessionUploadTask がエラー コード -997 で失敗する
バックグラウンド セッションで NSURLSessionUploadTask を実行しています。これは小さなデータの POST であり、サーバーから大きな応答を受け取ります。アプリがフォアグラウンドの場合は正常に動作します。ただし、アプリをバックグラウンドにするとすぐに、エラー NSURLErrorDomain、エラー コード: -997 "バックグラウンド サービスへの接続が失われました" でデリゲートへの呼び出しが行われます。
ダウンロード タスクのコンテキストで、他の投稿でこのエラーが参照されているのを見たことがあります。
アップロード タスクでこのエラーが発生したことはありますか?
アップロード本文が応答本文よりもはるかに小さいという事実は、この動作と関係がありますか?
ios - 画像のアップロード中の問題
ステップ1:ここでリクエストを作成しています
ステップ 2:ここでは、特定の場所にストリームを作成しています
ステップ 3:ここでは、アップロード タスクを作成しています。
私の問題は、アプリケーションがバックグラウンド モードに移行する前に、HTTPBody
Step:1 と Step:2 を使用して指定された場所にすべてのリクエスト (HTTPStream) を書き込み、ファイル内 (アプリケーションNSArray
のフォアグラウンド内) にすべてを書き込んだ後にすべてのリクエストを保存したいということです。HTTPStream
画像をアップロードする準備をします。
次に、ステップ 3 の助けを借りてバックグラウンド タスクの作成を開始しますNSArray
。このアプローチでは、画像をアップロードできません。
しかし、すべてのステップを 1 つずつ呼び出すと、サーバーに画像がアップロードされますが、このアプローチでは、特定の場所に書き込む必要があるため、アプリケーションは作成リクエストに対してフォアグラウンドにある必要がありHTTPBody
ます。
この問題を解決するのを手伝ってください。私は過去 2 週間からこの問題に行き詰まっています。私のアプリケーションでは、サーバー経由で 500 を超える画像をアップロードする必要がありました。