問題タブ [nsurlsession]
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.
objective-c - POST および GET リクエストを送信する方法は?
JSON
URL (POST
および)に送信したいGET
。
現在のリクエスト コードが機能しません。
使用ASIHTTPRequest
は責任ある回答ではありません。
objective-c - NSURLSession + マルチタスキング + iOS 7
私のアプリケーションでは、アプリケーションがスタンバイ モードであっても、新しいコンテンツを取得して最新の状態に保つようにしています。そのために、iOS 7 の新しいマルチタスク機能を使用したいと考えています。
まず、Info.plistにキーfetch
を追加して、バックグラウンド フェッチを有効にしました。UIBackgroundModes
次に、AppDelegate で最小バックグラウンド フェッチ間隔を設定しました。
そして最後に実装します:
今、私はNSURLSession
やりたいことを達成するために使用する必要があります: - サーバーで新しい画像ファイルが利用可能かどうかを確認します - はいの場合はダウンロードします - 新しいコンテンツが利用可能であることをユーザーに通知するプッシュ通知
で次のようなことを試しますperformFetchWithCompletionHandler:
:
しかし、私は NSURLSession に慣れていません。誰かがそれを使用するサンプル コードを持っている場合は、喜んで試してみたいと思います。
タイ、ペビー
ios - NSURLSession スレッド: 複数のバックグラウンド ダウンロードの追跡
だから私はメインスレッドでダウンロードを作成しています
ダウンロードに関連付けられた NSManagedContextID を NSMutableDictionary に追加して、後でデリゲート コールバックで取得できるようにします。
私self.downloadSession
の上記はこのように構成されています
私の問題は、デリゲート コールバックが別のスレッドで呼び出されているように見えることです。
そのため、self.downloads にアクセスして正しい objectID を取得すると、実際には、作成されたスレッドとは別のスレッドから NSMutableDictionary にアクセスしています。NSMutableDictionary はスレッドセーフではないと思います。それで、これに対する最善の解決策は何ですか、私はこのようなものを使うことができました
セッションを宣言するときに、デリゲート キューを mainQueue に設定します。これにより、すべてのデリゲートがメイン スレッドで呼び出されますが、可能であればすべてのコールバックをバックグラウンド スレッドに保持したいと考えています。
objective-c - NSURLSession委任:それに応じてカスタムSessionDelegateクラスを実装する方法は?
RequestManager と呼ばれるシングルトン クラスを取得しました。これは、アプリケーションのさまざまなモジュールとバックグラウンド タスクによって行われた要求を処理します。
次に、リクエスト中にすべてのコールバックを処理する、SessionDelegate と呼ばれる別のクラスを取得しました。
CommonCrypto などで多くのヘルパー クラスが必要なため、これらのクラスに関数をカプセル化して、クラスが過負荷にならないようにするというのが私の考えです。
そこで、コード化されたプロトコル RequestFactoryDelegate をすばやく設定して、受信したデータをオリジン リクエストを開始した送信者に送信します。
ええと、オブジェクトがあれば機能します。リクエストを送信するそれをsenderAと呼びましょう。設定されたデリゲートは常にsenderA自体であるためです。
この問題は、別のオブジェクト、たとえば、senderB がリクエストを送信する場合に発生しますが、同時にではなく、senderA が送信した直後に発生します。
senderA のリクエストはまだ進行中なので、senderB はデリゲートを彼に設定し、senderB のデリゲート関数が 2 回実行されます。
ええと...私は本当に独自のカスタム デリゲートを実装する必要があります (RequestFactory と同じクラスであるかどうかに関係なく)、senderA または senderB に適切に応答できるようにコールバック メソッドを処理するにはどうすればよいですか?
私の最後のアイデアは、NSURLSessionTasks クラスをオーバーライドして、独自のデリゲート プロパティまたはブロック プロパティなどを実装することです。
よろしくお願いします。
ios - NSURLSession を使用して POST リクエストを送信する
更新:解決策が見つかりました。記事の最後で読めます。
を使用して、リモート REST API への POST 要求を実行しようとしていますNSURLSession
。deviceId
アイデアは、との 2 つのパラメーターを使用してリクエストを作成することtextContent
です。
問題は、これらのパラメーターがサーバーによって認識されないことです。Google Chrome の POSTMAN を使用して POST を送信したため、サーバー部分は正しく機能し、完全に機能しました。
これは私が今使っているコードです:
で同じ手順を試しましたNSURLSessionUploadTask
:
何か案は?
解決
Content-Type
私のアプローチの問題は、すべてのリクエストで間違ったヘッダーを送信していたことです。したがって、コードが正しく機能するために必要な唯一の変更は、Content-Type = application/json
HTTP ヘッダーを削除することです。したがって、正しいコードは次のようになります。
他のパラメーターと一緒に画像を送信する
ここを使用して他のパラメーターと一緒に画像を投稿する必要がNSURLSession
ある場合は、次の例があります。
ios - iOS 7 - NSURLSession 再開可能なアップロード
現在、アプリケーションから複数の画像をサーバーにアップロードするシステムを設計中です。ファイルはローカルデバイスに保存され、現在のアイデアは、それらをチャンクに分割してから、チャンクごとにサーバーにアップロードし、成功メッセージが返されるのを待ってから次のファイルをアップロードすることです。
このプロセスはユーザーにとってシームレスである必要があります。ユーザーはボタンを押してすべての画像を送信し、アプリケーションを閉じてバックグラウンドで続行できるようにする必要があります。iOS 7 では、アップロードを新しい NSURLSession API に渡し、アプリケーションから独立してアップロード タスクを処理できることがわかりました。
この転送の信頼性を誰かが知っているかどうか疑問に思っていました。画像全体を渡した場合、インターネット接続が途中で切れるとどうなりますか? バックグラウンド転送サービスは後で再試行しますか? 画像をアップロードでき、途中で失敗した場合は、後で接続が再開されたときにその時点から続行できるという考えです。
私たちが持っていたアイデアの 1 つは、ファイルをチャンクに分割し、すべてのチャンクを個別の NSURLSessionUploadTasks として渡し、最終的にすべてがサーバーに送信されると想定することでした。
もう1つは、次を使用して最初のチャンクを送信することでした:
そして、completionHandler で次のチャンクを送信します。これに関する私の問題は、バックグラウンドで次のチャンクが
これは、接続されている場合にのみ WiFi 経由で送信することを意味します。すべてのネットワークで動作し、中断に対処できるようにするために、これが必要です。
コードは必要ありません。これがこれを達成するための正しい方法であるかどうかについてのアドバイスだけです。
ios - クラスが特定の iOS バージョンでコンパイルされないようにする
使用しているクラスがNSURLSession
あり、iOS 6 をサポートする必要があります。iOS 6 を対象としてコンパイルしようとすると、NSURLSession
存在しないため失敗します。
このクラスが iOS 6 用にコンパイルされないようにするにはどうすればよいですか?