NSURLConnection을 이용하면 간단하게 해당 웹서버의 html, xml등의 내용을 쉽게 가져올 수 있습니다.

1. 연결
connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.cocoadev.co.kr/rss]] delegate:self];

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

대상 URL을 인자로 NSURLConnection을 생성합니다. 위는 이 블로그의 rss를 주소로 생성하는 예입니다. delegate는 self로 현제 오브젝트로 지정합니다. delegate로 지정된 오브젝트는 NSURLConnection의 delegate 메소드를 구현하고 메시지를 받을 수 있습니다.

UIApplication의 networkActivityIndicatorVisible을 YES로 하여 데이터 수신 시 좌측과 같이 상단 상태바에 인디케이터가 회전하는 에니메이션으로 사용자에게 데이터 수신중임을 알려줍니다. 기본값은 NO로 되어 있습니다.

2. delegate 메소드 구현
NSURLConnection 생성시 delegate로 지정된 클래스에서는 해당 이벤트 처리 메소드를 구현해야 합니다. 가장 자주 사용되는 delegate 메소드는 데이터 수신, 연결 종료, 오류발생등에 관련된 것들입니다.

1) 데이터 수신
* connection:didReceiveData:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   [receiveData appendData:data];
}
데이터가 수신될 때 불려지면 웹서버로 부터 받은 데이터가 NSData 형태로 넘어 옵니다. NSMutableData의 appendData 메소드를 이용하여 수신되는 데이터들을 차례대로 저장합니다.

2) 연결 종료
* connectionDidFinishLoading:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   NSString *str = [[NSString alloc] initWithData:receiveData
encoding: NSUTF8StringEncoding];
   NSLog(@"%@", str);
   [str release];

   [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
데이터가 모두 수신되어 웹서버와의 연결이 종료되었을 때 호출됩니다. 이곳에서 원하는 작업을 하거나 다른 오브젝트가 처리하도록 할 수 있습니다. 위는 NSData로 저장된 데이터를 NSString으로 변환하여 출력하는 예입니다. xml이라면 NSXMLParser를 사용하여 데이터를 처리할 수 있습니다.

3) 오류 발생
* connection:didFailWithError:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   NSLog(@"Connect error: %@", [error localizedDescription]);   

  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
네트워크가 연결되지 않았을 경우등 오류가 발생하였을 때 호출되는 메소드 입니다. 해당 페이지가 없음을 나타내는 404 오류등은 이 메소드가 호출되지 않습니다.

모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. 2009.07.10 17:13  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.07.10 19:45 신고  댓글주소  수정/삭제

      str에 NSData로 수신된 데이터를 넣으셨나요? 아니면 NSData를 alloc을 하지 않고 사용하셨으면, 오브젝트가 참조시 이미 메모리에서 릴리즈되었는지도 모르겠습니다.

  2. 2009.07.22 15:13  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2009.07.22 17:50 신고  댓글주소  수정/삭제

      필요한 아무 클래스에다 구현하시면 됩니다. 처음에 테스트 해보실려면 AppDelegate가 구현된 클래스나 ViewController 서브 클래스에서 구현하시면 될 것 같습니다.

  3. 2009.07.22 22:23  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  4. 2010.04.06 19:47  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2010.04.07 15:31 신고  댓글주소  수정/삭제

      오류메시지 없어 정확히 무슨 오류인지는 모르겠습니다만...

      NSURLConnection *connection;

      으로 선언을 안하신 것 같습니다.

  5. html 2010.07.17 04:35  댓글주소  수정/삭제  댓글쓰기

    html을 nsstring으로 출력 할려면 어떻게 해야하죠?

  6. 2010.12.10 01:29  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. artesign 2012.08.16 11:02  댓글주소  수정/삭제  댓글쓰기

    팬입니다.. 정말 제가 필요한 정보들이 다 요약정리가 잘되어있네요 ㅜㅜ 파일입출려과 nsurlconnection 등등 ㅜㅜ