0

我有一个 UIViewController,它也是一个 NSURLConnectionDelegate。因此,它定义了以下行为:

– 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 回答