2010년 6월 27일 일요일

IPhone 네트워크 - URL 리퀘스트

URL 리퀘스트
특정 URL에서 동기적으로 데이터 로딩
-(NSInteger)retrieveScoreForUser:(NSString *)usr
{
NSString *urlStr = [NSString stringWithFormat:@“%@/score.php?u=%@“,server, url];
NSURL *scoreURL = [NSURL URLWithString:urlStr];
NSString *returnStr = [NSString stringWithContentsOfURL:scoreURL];
return [returnStr integerValue];
}
-(void) updateScoreForUser:(NSString *)usr WithScore:(NSInteger)scr
{
NSString *urlStr = [NSString stringWithFormat:@“%@/updateScorephp?u=%@&s=%i”, server,usr,scr];
NSURL * scoreURL = [NSURL URLWithString:urlStr];
NSString *returnStr = [NSString sringWithContentsOfURL:scoreURL];
}
stringWithContentsOfURL : URL의 내용을 동기적으로 로딩한다. 이것은 로딩이 끝날 때까지 현재 프로그램 실행이 멈춘다는 것이다.
-(void)retrivesScoreForUser:(NSStirng *)user
{
NSString *urlStr = [NSString stringWithFormat:@“%@/score.php?u=%@“, server,user];
NSURL *scoreURL = [NSURL URLWithString:urlStr];
NSURLRequest *scoreRequest = [NSURLRequest requestWithURL:scoreURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0];
theConnection = [[NSURLConnection alloc] initWithRequest:scoreRequest delegate:self];
if(theConnection)
{
theData = [[NSMutableData data] retain];
}
else
{
//연결 생성 실패
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[theData setLength:0];
}
-(void_connection:(NSURLConnection *)con didFailWithError:(NSError *)err
{
        NSLog(@“Can’t connect - %@“, [err localizedFailureReason]);
        [con release];
        [theData release];
}
-(void)connection:(NSURLConnection *)con didReceiveData:(NSData *)data
{
        [theData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
        NSString *responseStr = [NSString stringWithFormat:@“%s”,[theData mutableBytes]];
        score = [responseStr integerValue];
        [connection release];
        [theData release];
}
NSURLConnection의 논블럭킹 방식 : 프로그램이 멈춤 없이 비동기적으로 동작을 한다. 데이타가 확보되거나 요청이 실패하면 델리게이트 객체에 데이타를 처리하게 알려준다.
* 위의 소스는 테스트를 아직 하지 않은 상태이다. XCode에서 돌려본 소스도 아니고 웹에서
입력을 했기 때문에 오타로 인한 오동작으로 동작을 하지 않을 수 있다.

댓글 없음:

댓글 쓰기