2009-11-21 1 views
2

RSS 피더를 작성하고 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 { 

내가 NSStringNSURLResponse에서 오는 NSURL URL에하지만 난 수 없습니다 위의 함수에서 확인할 수 있습니다.

답변

2

두 대리자 메서드를 모두 구현하는 경우 먼저 후자의 알림을받지 않아야합니까? 그렇다면 인스턴스 변수에서 URL 문자열을 NSURLConnection (각 사이트마다 다를 수 있음)과 연결하여 나중에 데이터를 가져올 때 URL 문자열을 사용하면됩니다. NSCopying을 따르지 않기 때문에 NS (Mutable) Dictionary에서 키로 연결을 사용할 수는 없지만 일반적으로 사전을 제안합니다. 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까지 똑같이 할 수 있지만, Obj-C API 대신 clunky C API ('NSCreateMapTable' 및 friends)를 사용하면 어려울 것입니다. PubSub 프레임 워크에 10.5+가 필요할 경우 확실히 표시하십시오. –

+0

뛰어난 점, NSMapTable은 훌륭한 대안이며 CFMutableDictionary로 다이빙하는 것보다 쉽습니다. :-) –