我打算使用NSURLConnection創建2個請求。當服務器響應並調用connectionDidFinishLoading時,它將作爲參數傳入連接,但如何識別傳入的連接?創建多個NSURLConnections。如何識別哪個異步調用
回答
將兩個NSURLConnection對象保存爲您傳遞給connectionWithRequest:delegate:的任何委託對象的成員變量。然後,你可以比較每個那些在NSURLConnection的傳遞給connectionDidFinishLoading:和適當的迴應:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == firstConnection) {
// do something
}
else if (connection == secondConnection) {
// do something else
}
}
另一個稍微面向對象的選擇是創建兩個不同的委託對象,其中的每一個知道如何處理與每種類型的連接。然後在創建每個連接時傳遞相應的委託。這樣,您不需要檢查以查看您擁有哪個連接,因爲每個委託只會接收connectionDidFinishLoading:用於其自己的連接。
我在我的項目中做的是爲連接創建一個包裝類。這樣,您可以爲每個需要的連接保留一個新實例,並將這些類保留在另一個管理器類中。
喜歡的東西[AsynchronousConnection initWithURL:委託:選擇:]
然後你就可以確保當NSURLConnection的是做正確的事是/失敗。
我更喜歡每個連接的不同代表。雖然這是一個開銷。幸運的是,您可以通過使用塊來簡化事情。這是標準SDK中尚不存在的新功能,但您可以使用3rd-party framework called PLBlocks。 Here is an article關於如何使用它們,它還包含NSURLConnection的示例。
這是客戶端代碼進行HTTP請求與塊的回調:
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
[NSURLConnection sendAsynchronousRequest:req onCompletionDo: ^(NSData *data, NSURLResponse *res, NSError *err) {
NSLog(@"data: %ld bytes. res: %@, error: %@", (long)[data length], res, err);
[cell.activity stopAnimating];
}];
我曾經圍繞NSURLConnection
創建一個定製的包裝也一樣,但現在我已經切換到ASIHTTPRequest。這是一個很棒的圖書館,提供比NSURLConnection
更多的靈活性和功能。看看並嘗試一下,這真的很值得。
我也使用這個,但有一個圍繞這個 – coneybeare 2009-09-13 23:57:35
包裝我曾經使用ASIHTTPRequest作爲好吧,但不幸的是,從2011年9月起,它的作者不再支持它:http://allseeing-i.com/%5Brequest_release%5D – 2012-04-16 03:03:19
@DanJ:近來非常受歡迎的替代方案似乎是[AFNetworking](https:/ /github.com/AFNetworking/AFNetworking/)。 – 2012-07-25 16:17:45
轉至NSURLConnection.h文件,你會發現下面。
創建時,NSURLConnection將執行深層副本 NSURLRequest。該副本可通過-originalRequest 方法獲得。當連接執行加載時,由於協議規範化或由於以下 重定向,此請求可能會更改 。 -currentRequest可以用來檢索這個值。
最終[連接currentRequest] .URL absoluteURL可能會有所幫助。
Regards, PRASANNA。
Prasanna是什麼意思? – Ranjit 2014-06-06 06:26:58
- 1. 多個NSURLConnections是否創建多個NSThreads?
- 2. 如何鏈接異步NSURLConnections?
- 3. 如何識別(創建哪個標籤)這個圖片?
- 4. Android - 如何在一個Activity中創建兩個異步調用?
- 5. ios - 多個異步調用
- 6. Android多個異步調用
- 7. 多個Ajax異步調用
- 8. 多個異步調用
- 9. 將多個異步調用
- 10. 進步多個異步跟蹤調用
- 11. 識別哪個用戶創建了連續集成(CI)構建
- 12. 哪一個使用異步或回調
- 13. 處理多個調用異步回調
- 14. 如何識別使用手勢識別器輕敲哪個UIImageView?
- 15. 如何識別哪個.apk使用調試密鑰簽名
- 16. 如何識別哪個類正在調用特定的方法?
- 17. 在回調函數中創建一個新的異步調用
- 18. 如何識別右側哪個ListView?
- 19. 如何識別哪個imageView被觸摸?
- 20. 如何識別哪個`view`被點擊?
- 21. 如何識別哪個銷被挖掘
- 22. 如何識別Django中的哪個ajax?
- 23. 如何識別我在哪個線程?
- 24. 如何識別哪個用戶初始化或創建了會話變量?
- 25. 的NodeJS多個異步調用
- 26. 茉莉 - 多是,一個異步調用
- 27. Node.js - 等待多個異步調用
- 28. XMLRPCPP異步處理多個調用?
- 29. 等待多個異步調用完成?
- 30. Angular 2調用多個異步方法
這不是一個非常可擴展的解決方案 – coneybeare 2009-09-13 14:40:05
不是如此可擴展,但很好的解決方案,解決了我的問題。謝謝。 – Krishna 2012-02-09 14:28:55
@cduhn是否可以繼承NSURLConnection,併爲其指定一個ID屬性作爲NSString。通過這種方式,如果每個對象都有可能需要連接的無限數量的對象(例如,接受好友請求列表),則只需將您的CustomNSURLconection的ID設置爲與唯一標識對象的值相同的值例如用戶ID?這樣你就不必擁有數百個NSURL連接的實例。我現在無法測試這個,因此我在這裏問這個問題 – pnizzle 2012-10-31 02:13:09