2010-03-09 71 views

回答

3

Yups,ASIHttpRequest一次可以处理多个请求。请参阅帮助documentation并注意这一部分。

使用队列

这个例子做同样的事情再次 ,但我们已经创建了一个 NSOperationQueue对我们的要求。

使用一个NSOperationQueue(或 ASINetworkQueue,见下文)为您提供了异步 请求 更多的控制。当使用队列时,只有 某些数量的请求可以同时在 上运行。如果您在队列的 maxConcurrentOperationCount属性中添加更多的 请求,则 请求将等待其他人在 完成之前完成。

  • (IBAction为)grabURLInTheBackground:(ID)发送方 {如果{ [自setQueue:[[[NSOperationQueue的alloc] INIT]自动释放]]([自队列]!); } NSURL * url = [NSURL URLWithString:@“http://allseeing-i.com”]; ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [请求 setDidFinishSelector:@selector(requestDone :)]; [要求 setDidFailSelector:@selector(requestWentWrong :)]; [[self queue] addOperation:request]; //队列是一个NSOperationQueue}

  • (无效)requestDone:(ASIHTTPRequest *)请求{的NSString *响应= [请求responseString]; }请求错误:(ASIHTTPRequest *)请求{NSError * error = [请求错误];} }

在上述样品中,“队列”是 保留 我们的控制器的NSOperationQueue属性。

我们正在设置自定义选择器,当请求 成功或失败时将调用 。如果您没有设置 这些,则将使用默认值(requestFinished: 和requestFailed :),如上例中的 。

处理的 多个请求

如果你需要处理的成功和 失败在许多不同类型 请求的成功和失败,你有几种选择:

  1. 如果您的要求是所有的相同的宽类型,但你想 区分它们,你可以设置 userInfo NSDictionary属性 每个请求与你自己的自定义数据 ,你可以读取完成/ 失败的委托方法。
  2. 如果你需要处理的成功和失败在为每个请求完全不同的 的方式,设置不同的 setDidFinishSelector/ setDidFailSelector为每个请求
  3. 对于更复杂的情况,还是要分析的响应 背景,为每个 类型的请求创建一个ASIHTTPRequest的最小 子类,并覆盖 requestFinished:和failWithProblem :.

希望这会有所帮助。

感谢,

Madhup