ASIHTTPRequest上的多个请求

时间:2011-07-04 13:08:27

标签: iphone objective-c nsurlconnection asihttprequest

我需要从三个不同的网址下载三组不同的数据。我决定使用ASIHTTPRequest。其中两个URL是我需要解析的JSON提要,其中一个是我在线存储的.txt文件。

现在ASIHTTPRequest网站上针对异步请求的示例显示以下内容:

- (IBAction)grabURLInBackground:(id)sender {
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

要传递多个网址,我可以在三个不同的网址上调用“请求”。但我不确定如何在requestFinished方法中处理它们。文档显示为:

- (void)requestFinished:(ASIHTTPRequest *)request {
   // Use when fetching text data
   NSString *responseString = [request responseString];

   // Use when fetching binary data
   NSData *responseData = [request responseData];
}

这种方法如何区分不同的请求,以便我能以不同的方式处理它?<​​/ p>

谢谢,

4 个答案:

答案 0 :(得分:12)

您可以通过

区分不同的请求
  • 设置请求的userInfo字典
  • 将didFinishSelector(和didFailSelector等)设置为不同的方法
  • 使用不同的类作为委托
  • 使用块
  • 使用请求的标记属性
  • 子类ASIHTTPRequest和覆盖覆盖requestFinished:和failWithError :(仅建议用于复杂情况)

答案 1 :(得分:3)

您只需要两段代码。一个'标记'您的网址:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"identifierX", @"typeOfRequest",nil]];

和另一个识别它:

if ([[[request userInfo] valueForKey:@"typeOfRequest"] isEqualToString:@"identifierX"]){
        // Do here whatever you need to do for the url associated with identifierX
    }

那应该是它!

答案 2 :(得分:1)

您可以设置要求的用户名和标记。

这是imageview的例子。 REQ。

UIImageView *imgV=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];

    ASIHTTPRequest *req=[ASIHTTPRequest requestWithURL:[NSURL URLWithString:[self.arr objectAtIndex:i]]];
    [req setUsername:[NSString stringWithFormat:@"%i",i]];
    [req setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:imgV,@"imgV",nil]];
    [req setDelegate:self];
    [req startAsynchronous];
    [imgV setContentMode:UIViewContentModeScaleToFill];
    [imgV setClipsToBounds:YES];
    [imgV setTag:kTagImageViewInScrollView];
    [scr2 addSubview:imgV];
    [scr2 setDelegate:self];
    [imgV release]; imgV=nil;

和requestFinished

- (void)requestFinished:(ASIHTTPRequest *)request {
    [(UIImageView*)[[request userInfo] valueForKey:@"imgV"] setImage:[UIImage imageWithData:[request responseData]]];   

}

答案 3 :(得分:1)

如果您有不同的URL,则可以检查ASIHTTPRequest的originalURL属性。

或者您可以使用[request hash]获取每个对象的NSObject哈希并稍后检查。