2014-05-22 34 views
2

我有一個NSMutableArray包含10個URL,我需要從中獲取HTTP標頭。一個接一個調用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]; 

} 

當前結果:所有請求在一個時間去服務器。

預期結果:希望發送一個請求後得到響應切斷我想在後臺發送另一個請求。

有什麼建議嗎?

+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異步調用:

Link for 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。它的工作正常。只有ARC在ASIHTTPRequest中不可用。 – PREMKUMAR

+0

是的,它工作正常,但你應該總是嘗試使用維護的最新庫。 –

相關問題