私はjsonを解析しました。ビデオIDのリストを含む配列に格納されたjsonの結果。ここで、ビデオの詳細を取得する別の json を解析したいと思います。この json はループvideoIDArray.count時間で解析されます
コードは次のとおりです。
- (void)viewDidLoad
{
    [super viewDidLoad];
    videoIDArray = [[NSMutableArray alloc] init];
    viewArray = [[NSMutableArray alloc] init];
    //======Json Parsing
    NSString *urlstring = [NSString stringWithFormat:@"https://myURL/youtubeList"];
    NSURL *url = [NSURL URLWithString:urlstring];
    NSURLRequest *Request = [NSURLRequest requestWithURL:url];
    conn = [[NSURLConnection alloc] initWithRequest:Request delegate:self];
    if (conn) {
        webdata = [[NSMutableData alloc] init];
    }
    //==========
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if (connection==conn) {
        [webdata setLength:0];
    }
    if (connection==conn2) {
        [webdata2 setLength:0];
    }
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if (connection==conn) {
        [webdata appendData:data];
    }
    if (connection==conn2) {
        [webdata2 appendData:data];
    }
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //-------conn getting list of videoID
    if (connection == conn) {
        NSString *str = [[NSString alloc] initWithBytes:[webdata bytes] length:[webdata length] encoding:NSUTF8StringEncoding];
        NSDictionary *Result = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
        [videoIDArray addObjectsFromArray:[[[Result valueForKey:@"items"] valueForKey:@"id"] valueForKey:@"videoId"]];
        NSLog(@"Video ID %@",videoIDArray);
        //======conn2 is for getting detail of video base on videoID object
        for (int i=0; i<videoIDArray.count; i++) {
            NSString *urlstring = [NSString stringWithFormat:@"https://mydetailURL/videos/%@?v=2&alt=json",[videoIDArray objectAtIndex:i]];
            NSURL *url = [NSURL URLWithString:urlstring];
            NSURLRequest *Request = [NSURLRequest requestWithURL:url];
            conn2 = [[NSURLConnection alloc] initWithRequest:Request delegate:self];
            if (conn2) {
                webdata2 = [[NSMutableData alloc] init];
            }
        }
        //==========
    }
    if (connection==conn2) {
        [MBProgressHUD hideHUDForView:self.view animated:YES];
        [youtubeTableView reloadData];
        NSString *str = [[NSString alloc] initWithBytes:[webdata bytes] length:[webdata length] encoding:NSUTF8StringEncoding];
        NSDictionary *Result = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
        NSLog(@"ResultConn2 %@",Result);
        [viewArray addObject:[[[Result valueForKey:@"entry"] valueForKey:@"yt$statistics"] valueForKey:@"viewCount"]];
        NSLog(@"View Array %@",viewArray);
    }
}
問題は次のとおりです。ループ内の回数だけ解析していません。最後に 1 回の connectionDidFinishLoading メソッドが呼び出されてクラッシュしました。
誰かがこれを行う方法を教えてもらえますか?
これを行う他の方法はありますか?
編集
AFネットワーキングを使用
私は自分のコードを次のように変更しました:
 for (int i=0; i<videoArray.count; i++) {
      [self parseWithUrl:[videoArray objectAtIndex:i]];
   }
 -(void)parseWithUrl: (NSString *)urlstr
  {
     NSString *tstr=[urlstr stringByReplacingOccurrencesOfString:@"\"" withString:@""];
     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://myURL/feeds/api/videos/%@?v=2&alt=json",tstr]];
     NSURLRequest *request = [NSURLRequest requestWithURL:url];
     AFJSONRequestOperation *operation =
     [AFJSONRequestOperation JSONRequestOperationWithRequest: request
                                                success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                          //instead of NSLog i want to return result
                                                    NSDictionary *result  = (NSDictionary *)JSON;
                                                    NSLog(@"VideoResult %@",result);
                                                } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"
                                                                                                 message:[NSString stringWithFormat:@"%@",error]
                                                                                                delegate:nil
                                                                                       cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                    [av show];
                                                }];
    [operation start];
 }
私は書きたい:
-(NSDictionary *)parseWithUrl: (NSString *)urlstr
出来ますか?
はいの場合、結果を返す場所を教えてください。
jsonの完了後に別のメソッドを呼び出したい場合、呼び出しコードをどこに書くか
ここに私のコードがあります: [self getData:self.weather]; 私のメソッドは、私が望まない回数を呼び出しました。
 success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                                                    self.weather  = (NSDictionary *)JSON;
                                                    [self getData:self.weather];
 .....
 .....
  }