2014-05-22 1 views
2

HTTP 헤더를 가져올 필요가있는 10 개의 URL을 포함하는 NSMutableArray가 있습니다.하나씩 NSURLConnection 호출

for(int i=0; i<[contactsArray count];i++) 
{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    NSString *reqstr=[NSString stringWithFormat:@"%@",urlString ]; 
    [request setURL:[NSURL URLWithString:reqstr]]; 
    NSLog(@"requested url is %@",reqstr); 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"content-type"]; 
    [request setHTTPBody:[mDict JSONData]]; 

    NSURLConnection *theConnection=[[NSURLConnection alloc]initWithRequest:request   delegate:self startImmediately:YES]; 

} 

현재결과 : 모든 요청은 한 번에 서버로가는

다음은 내 코드입니다.

예상 결과 : 응답을받은 후 하나의 요청을 보내려고합니다 백그라운드에서 다른 요청을 보내려고합니다.

제안 사항?

Link for ASIHTTPRequest

그런 다음 다음과 같은 코드 쓰기 :

+0

대기 : 귀하의 코드를 다음과 같이 보일 수 있습니다 다음 요청을 보내기 전에 도착합니다. –

+0

[AFNetworking] (https://github.com/AFNetworking/AFNetworking)을 사용하지 않는 이유 –

답변

4

sendAsynchronousRequest:queue:completionHandler: 방법을 사용하여 코드를 리팩토링, 현재 포스트가 완료되면 자신을 호출 :

카운트를 인스턴스 변수로 이동하십시오. 그것을 currentItem이라고 부르 자. 에 대한 응답을

- (void) postItems; 
{ 
    while (currentItem < [contactsArray count) 
    { 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    NSString *reqstr=[NSString stringWithFormat:@"%@",urlString ]; 
    [request setURL:[NSURL URLWithString:reqstr]]; 
    NSLog(@"requested url is %@",reqstr); 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"content-type"]; 
    [request setHTTPBody:[mDict JSONData]]; 

    [NSURLConnection sendAsynchronousRequest: request 
     queue: dispatch_get_main_queue() 
     completionHandler: ^(NSURLResponse *response, NSData *data, NSError *error) 
     { 
     //check for errors 
     //save any response data 

     //Now trigger the next request 
     currentItem++ 
     [self postItems]; 
     } 
    ]; 
    } 
} 

(완료 블록의 구문은 정확히 맞지 않을 수도 있습니다 내가 매개 변수를 차단하기위한 구문을 조금 투쟁..)

0

당신은 ASIHTTPRequest 비동기 호출을 사용

for(int i=0; i<[contactsArray count];i++) 
{ 

NSURL* url = [NSURL URLWithString:urlString]; 
__block ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:url]; 

[request setCompletionBlock:^ 
{ 

       //NEED SOMEHOW RETURN TRUE IF SUCESSED 

}]; 

[request setFailedBlock:^ 
{ 
    //NEED RETURN FALSE 
}]; 

[request startAsynchronous]; 

} 
+0

ASIHTTPRequest가 더 이상 사용되지 않으며 대신 AFNetworking을 사용하십시오. –

+0

내 프로젝트의 경우 ASIHTTPRequest를 사용하고 있습니다. 그것의 일 벌금. ASIHTTPRequest에서는 ARC 만 사용할 수 없습니다. – PREMKUMAR

+0

네, 잘 작동하지만 항상 최신 라이브러리를 유지하려고 노력해야합니다. –