0

NSURLConnectionDelegate でもある UIViewController があります。そのため、次のような動作を定義します。

– connection:didReceiveResponse: 
– connection:didReceiveData: 
– connectionDidFinishLoading:

ただし、このビューには、デリゲートとして割り当てる複数の NSURLConnections があります。connectionDidFinishLoading でカスタム動作を実現する必要があります: どのオブジェクトがデリゲートを呼び出しているかに応じて (たとえば、オーディオの再生、画像の表示、リンクを開くなど)

これを達成する正しい方法は何ですか?

4

3 に答える 3

1

それぞれの接続を宣言できます

@interface YourViewController
@property (retain, nonatomic) NSURLConnection *audioConnection;
@property (retain, nonatomic) NSURLConnection *anotherConnection;

次に、connectionDidFinishLoading: メソッドで、次のように各接続を呼び出します。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
     if (connection == audioConnection) {
           //doSomething
     } else if (connection == anotherConnection) {
           //doSomethingElse
     }
}
于 2012-10-27T04:38:00.843 に答える
1

各デリゲート メソッドは、パラメーターとして NSURLConnection を渡します。接続への参照をプロパティに保存し、connectionDidFinishLoading に渡された接続パラメーターが音声接続か画像接続かなどを確認します。

于 2012-10-27T04:33:36.340 に答える
0

さまざまなカテゴリに分類される多くの urlconnections がある場合 (たとえば、5 つのうち 10 つがオーディオ用、3 つが表示画像用、2 つがリンクを開くためなど) の場合は、サブクラスNSURLConnection化してカスタムNSURLConnectionクラスを作成することをお勧めします。タグのような独自のプロパティをこのクラスに追加できます。また、独自のカスタム タグをさまざまなタイプの接続に定義します。およびデリゲート メソッドで、UIViewControllerこのサブクラス オブジェクトを使用し、このtagプロパティを使用して異なるNSURLConnections.

例:-

CustomNSURLConnectionファイルを作成して書き込み、

#define kAudioConnectionTag 100
#define kDisplayConnectionTag 200
#define kOpenURLConnectionTag 300

@interface CustomNSURLConnection : NSURLConnection 

@property (nonatomic) NSInteger tag;

UIViewControllerクラスでは、

CustomNSURLConnection *audioConnection = [CustomNSURLConnection ...];
audioConnection.tag = kAudioConnectionTag;

CustomNSURLConnection *displayConnection = [CustomNSURLConnection ...];
audioConnection.tag = kDisplayConnectionTag;

CustomNSURLConnection *openURLConnection = [CustomNSURLConnection ...];
audioConnection.tag = kOpenURLConnectionTag;

- (void)connectionDidFinishLoading:(CustomNSURLConnection *)connection{
     if (connection.tag == kAudioConnectionTag) {
           //code
     } else if (connection.tag == kDisplayConnectionTag) {
           //code
     } else {
           //code
     }
}
于 2012-10-27T07:40:52.030 に答える