2010-03-09 85 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