2009-09-12 35 views

回答

12

將兩個NSURLConnection對象保存爲您傳遞給connectionWithRequest:delegate:的任何委託對象的成員變量。然後,你可以比較每個那些在NSURLConnection的傳遞給connectionDidFinishLoading:和適當的迴應:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    if (connection == firstConnection) { 
     // do something 
    } 
    else if (connection == secondConnection) { 
     // do something else 
    } 
} 

另一個稍微面向對象的選擇是創建兩個不同的委託對象,其中的每一個知道如何處理與每種類型的連接。然後在創建每個連接時傳遞相應的委託。這樣,您不需要檢查以查看您擁有哪個連接,因爲每個委託只會接收connectionDidFinishLoading:用於其自己的連接。

+3

這不是一個非常可擴展的解決方案 – coneybeare 2009-09-13 14:40:05

+0

不是如此可擴展,但很好的解決方案,解決了我的問題。謝謝。 – Krishna 2012-02-09 14:28:55

+0

@cduhn是否可以繼承NSURLConnection,併爲其指定一個ID屬性作爲NSString。通過這種方式,如果每個對象都有可能需要連接的無限數量的對象(例如,接受好友請求列表),則只需將您的CustomNSURLconection的ID設置爲與唯一標識對象的值相同的值例如用戶ID?這樣你就不必擁有數百個NSURL連接的實例。我現在無法測試這個,因此我在這裏問這個問題 – pnizzle 2012-10-31 02:13:09

1

我在我的項目中做的是爲連接創建一個包裝類。這樣,您可以爲每個需要的連接保留一個新實例,並將這些類保留在另一個管理器類中。

喜歡的東西[AsynchronousConnection initWithURL:委託:選擇:]

然後你就可以確保當NSURLConnection的是做正確的事是/失敗。

2

我更喜歡每個連接的不同代表。雖然這是一個開銷。幸運的是,您可以通過使用塊來簡化事情。這是標準SDK中尚不存在的新功能,但您可以使用3rd-party framework called PLBlocksHere 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]; 
}]; 
1

我曾經圍繞NSURLConnection創建一個定製的包裝也一樣,但現在我已經切換到ASIHTTPRequest。這是一個很棒的圖書館,提供比NSURLConnection更多的靈活性和功能。看看並嘗試一下,這真的很值得。

+0

我也使用這個,但有一個圍繞這個 – coneybeare 2009-09-13 23:57:35

+0

包裝我曾經使用ASIHTTPRequest作爲好吧,但不幸的是,從2011年9月起,它的作者不再支持它:http://allseeing-i.com/%5Brequest_release%5D – 2012-04-16 03:03:19

+1

@DanJ:近來非常受歡迎的替代方案似乎是[AFNetworking](https:/ /github.com/AFNetworking/AFNetworking/)。 – 2012-07-25 16:17:45

0

請不要參考https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

轉至NSURLConnection.h文件,你會發現下面。

創建時,NSURLConnection將執行深層副本 NSURLRequest。該副本可通過-originalRequest 方法獲得。當連接執行加載時,由於協議規範化或由於以下 重定向,此請求可能會更改 。 -currentRequest可以用來檢索這個值。

最終[連接currentRequest] .URL absoluteURL可能會有所幫助。

Regards, PRASANNA。

+0

Prasanna是什麼意思? – Ranjit 2014-06-06 06:26:58