2012-04-28 4 views
0

スロー複数のURL retreival私は、私は次のように複数のURLにアクセスしようとした別のURLiOSのコード

からデータを取得する取得したデータに基づいて、URLにアクセスし、このURLからデータを取得します:

- (void) showClassRoom:(NSString *)theMessage{ 

    NSString *queryURL =[NSString stringWithFormat:@"http://nobert.cloudfoundry.com/CalOfEvents/tos"]; 
    NSURL *url = [NSURL URLWithString: queryURL]; 
    NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  

    NSError *error; 
    NSURLResponse *response; 

    NSData *returnData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; 
    if(returnData){ 
     NSString *strResult = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:NSUTF8StringEncoding]; 
     NSDictionary *result = [strResult JSONValue]; 
      for(id theKey in result){ 
        for(id hello in theKey){ 
         NSLog(@"The key:%@, The value:%@",hello,[theKey objectForKey:hello]); 

      } 
     } 
     if(TRUE){//based on some condition secondShowClassRoom is called 
      [self secondShowClassRoom]; 
     }  
    } 
} 

- (void) secondShowClassRoom{ 

NSString *queryURL =[NSString stringWithFormat:@"http://nobert.cloudfoundry.com/CalOfEvents/to"]; 
    NSURL *url = [NSURL URLWithString: queryURL]; 
    NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    NSError *error; 
    NSURLResponse *response; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; 

    if(returnData){ 
     NSString *strResult = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:NSUTF8StringEncoding]; 
     NSDictionary *result = [strResult JSONValue]; 
      for(id theKey in result){ 
      for(id hello in theKey){ 
       NSLog(@"The key:%@, The value:%@",hello,[theKey objectForKey:hello]); 
      } 
     } 
    } 
} 

は、これは非常にゆっくりと、データを取得し、私のアプリは、私は拡張現実感

上でアプリケーションを開発しています速くしかし、私は複数のURLにアクセスすることはできませんよ別の方法があるように非常に高速なアクセスが必要です。

- (void) showClassRoom:(NSString *)theMessage{ 
    NSString *queryURL =[NSString stringWithFormat:@"http://nobert.cloudfoundry.com/CalOfEvents/to"]; 
    NSURL *url = [NSURL URLWithString: queryURL]; 
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 

    if (conn) { 
     webData = [[NSMutableData data] retain]; 
    } 
    classRoomControl.hidden = NO; 
    labControl.hidden = YES; 
    placementControl.hidden = YES; 

} 

-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *) response{ 

    [webData setLength: 0]; } 

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *) data { 

    [webData appendData:data]; 

} 
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *) error { 

    [conn release]; 
    [webData release]; 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *) connection { 
    [conn release]; 
    NSLog(@"DONE. Received Bytes: %d", [webData length]); 

    NSString *strResult = [[NSString alloc] initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
    NSDictionary *result = [strResult JSONValue]; 

for(id theKey in result){  
     for(id hello in theKey){ 
      NSLog(@"The key:%@, The value:%@",h,hello); 
     } 
    } 
    [strResult release]; 
    [webData release]; 
} 

あなたがそれを処理しない限り、同期通信は、あなたのUIをブロックしますので、あなたは(右のネットワーク通信のための非同期モデルを好む軌道に乗っている

答えて

1

..いただければ幸いですthis.Any助けを借りて、私を助けてください別スレッド)。

複数の非同期ネットワークリクエストをチェーンする正しい方法は、コールバック(つまり、connectionDidFinishLoadingの1つのリクエストが完了すると、次のリクエストを送信する)で次々とリクエストを実行することです。

NSURlRequest/NSURLConnectionをもう1つ使用することは、不必要に複雑に思えるので、AFNetworkingのようなフレームワークで試してみてください。