2009-11-21 32 views
2

我在寫一個RSS feed,並使用NSXMLParser爲我解析一個XML頁面。 一切正常。如何區分委託方法中的NSURLConnections?

這是處理異步連接的代碼:

static NSString *feedURLString = @"http://www.example.com/data.xml"; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feedURLString]]; 
feed = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease]; 

現在我想要添加其他網站使用上述同樣的代碼進行分析,而我需要做不同的動作,在不同的URL

我採取委託函數:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

問題是我無法弄清楚哪個網站是所謂的,我只得到了數據。

我怎樣才能找出連接解析到哪個URL?

例如在:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

我可以檢查NSStringNSURL URL是來自NSURLResponse但在上述功能我不能。

回答

2

如果你實現了兩個委託方法,你不應該先收到後一個通知嗎?如果是這樣,您可以將URL字符串與實例變量中的NSURLConnection(假定每個站點會有所不同)相關聯,並在以後獲取數據時使用它。我通常會建議一個字典,儘管你不能使用連接作爲NS(可變)字典中的關鍵字,因爲它不符合NSCopying。您可以使用URL字符串作爲關鍵字,但這會使查找複雜化。也許是一對數組?

更重要的是,爲什麼要從頭開始編寫RSS閱讀器?在10.5+你可以use the PubSub.framework to do the work for you。這個框架處理各種奇怪的格式和無效的XML,並且可以真正爲您節省大量時間。也許這很適合你想要做的事情?

+2

在10.5+上,你可以使用'NSMapTable'來處理'NSURLConnection - > NSURL'映射。在10.0到10.4之間,你可以做同樣的事情,但是你會被笨重的C API('NSCreateMapTable'和朋友)而不是Obj-C API卡住。 如果您需要10.5+,肯定會給PubSub框架看一看。 – 2009-11-22 00:16:36

+0

非常好的一點,NSMapTable是一個很好的選擇,比潛入CFMutableDictionary更容易。 :-) – 2009-11-22 03:42:52