2016-12-26 12 views
2

私はサーバ通信にNSURLSessionを使用しています。私はファイルをダウンロードしてアップロードするために2つのクラスを個別に持っています。私はダウンロードとアップロード操作のためにSingle NSURLSessionを使用したいと思います。私はNSURLSessionの代理人を実行時にsetDelegateオプションを使って変更することはできません。私はデリゲートを使ってデータを検証しています。実行時にNSURLSessionの代理オブジェクトを変更する方法はありますか?NSURLSessionへのデリゲートの変更方法

ありがとうございました。

+0

何を行うことができますして第三デリゲートを紹介し、そのURLSessionDelegateデリゲートメソッドが呼び出されるたびクラスの両方からそのメソッドを呼び出すことである。Singleton' 'の –

+0

使用はなぜ「私はダウンロードおよびアップロード操作のための単一NSURLSessionを使いたい」 – iphonic

+0

を助けることができますか?必要NSURLSessionsを複数使用する理由は、異なる代理人の正確なところです。 – matt

答えて

2

delegateを変更することはできません。これは、 "このオブジェクトが作成されたときに割り当てられた"代理人です。そしてthe documentationと言うように行く:

注:このdelegateオブジェクトは、オブジェクトの作成時に設定する必要があり、変更することはないかもしれません

したがって、さまざまなネットワークタスクを区別してそれぞれを適切に処理できるデリゲートオブジェクトを設計する必要があります。

あなたは、理論的には、別のデリゲートオブジェクトを作成し、二次デリゲートオブジェクトへのポインタのタスク識別子をキーと辞書を、維持することができます。 NSURLSessionのデリゲートを作成し、タスクデリゲートメソッドの場合は、そのデリゲートオブジェクト内の適切なメソッドを呼び出して、タスク識別子を辞書で検索します。しかし、これはちょっと面白くないので、問題を解決する簡単な方法があれば、おそらく止めて尋ねてください。

2

ロブが言うように、あなたはNSURLSessionのデリゲートを変更することはできません。

その他のオプションがいくつかあります。

  • あなたは がNSURLSessionを管理し、その者の代理人であることをダウンロードマネージャオブジェクト(おそらくシングルトン)を設定し、前方のアップロードまたはダウンロードを要求したどんな目的に メッセージがそれを持つことができます。

  • をアップロードするためのNSURSessionと、ダウンロードするためのNSURSessionのインスタンスをそれぞれ別々のデリゲートで作成できます。 (あなたがそれを行うにしたくない が、あなたはそのオプションを再検討すべきであると述べた。

  • あなたは、デリゲートを使用するのではなく、完了ハンドラ を渡すNSURLSession方法を使用することができます。..

関連する問題