2011-05-18 79 views
0

我想創建一個像使用NSUrlConnections網絡管理器的東西。 爲此,我希望能夠發送多個請求,但我也希望能夠在響應到達時識別發出請求的客戶端(委託)。 我創建了一個的NSDictionary這樣的:網絡管理器與NSURLConnection

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:SERVER_TIMEOUT]; 
.... 
[clients setObject:client forKey:connection]; 

在 「 - (空)connectionDidFinishLoading:(NSURLConnection的*)連接」 我有這樣的事情:

client = (id<RTANetworkDelegate>)[clients objectForKey:connection]; 
[clients removeObjectForKey:connection]; 

的網絡管理是委託所有的連接,我做了一些預處理,然後將(解析的)響應發送給正確的委託,該委託首先發送請求。

不幸的是,它似乎是一個NSMutableURLRequest不能設置爲在字典中的一個關鍵,因爲它不具備copyWithZone方法,我也得到了錯誤:

-[NSURLConnection copyWithZone:]: unrecognized selector sent to instance

任何幫助,將不勝感激! 謝謝!

=======================================

[編輯]我已經發現這其間:

http://blog.emmerinc.be/index.php/2009/03/15/multiple-async-nsurlconnections-example/

這似乎解決我的問題。我仍然不知道這是否是最好的解決辦法,但。我以爲我會在這裏發佈它,因爲它也可能幫助其他人。

回答

3

您可以使用連接對象的-hash值作爲重點:

[clients setObject:client forKey:[connection hash]]; 

我會從實際的URL或任何兩個請求可能具有相同的URL類似望而卻步。

+0

如果兩個連接相同(但可能從雲中獲取不同的數據)會發生什麼情況,那麼-hash是否會爲它們返回相同的值?通過定義NSObject協議--hash應該爲它們兩個返回相同的值。'如果兩個對象相等(由isEqual:方法確定),它們必須具有相同的散列值。'我假設isEqual:對於兩個看起來像的NSURLConnections,將返回YES。 – 2011-08-12 10:34:34

+1

這兩個NSURLConnections將會不同(它們會有不同的指針),所以isEqual將返回false並且哈希值也會不同。 – InsertWittyName 2011-08-12 11:57:36

+0

乾杯,爲我清除,我懷疑是這樣,但不知何故,我假設isEqual:比較內容而不是指針。 – 2011-08-12 18:35:59