1

アプリの非同期スレッドで Google のジオコーディング API と Distance Matrix API を呼び出していますが、NSRangeException が発生します。これが私のコードです:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^
{
    NSString *urlStringGeoCoding;
    NSString *urlString;

    urlStringGeoCoding = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/"
                                                    @"api/geocode/json?"
                                                    @"latlng=40.714224,-73.961452&sensor=true"];

    urlString = [NSString stringWithFormat:@"http://maps.googleapis.com"
                                           @"/maps/api/distancematrix/json?"
                                           @"origins=%@&destinations=%@&mode=driving&"
                                           @"language=en&sensor=true&units=imperial","
                                           @"current,@"Chicago,IL"];

    NSURL   *urlGeo = [NSURL URLWithString:[urlStringGeoCoding
                          stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSURL   *url    = [NSURL URLWithString:[urlString
                          stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSData  *googledatageo = [NSData dataWithContentsOfURL:urlGeo];
    NSData  *googledata    = [NSData dataWithContentsOfURL:url];
    NSError *errorgeo;
    NSError *error;

    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:googledata 
                                                                options:kNilOptions 
                                                                  error:&error];
    NSMutableDictionary *jsongeo = [NSJSONSerialization JSONObjectWithData:googledatageo 
                                                                   options:kNilOptions 
                                                                     error:&errorgeo];

    NSString *result = [[[[[[json objectForKey:@"rows"] objectAtIndex: 0] objectForKey:@"elements"] objectAtIndex:0]objectForKey:@"distance"]objectForKey:@"text"];
    if(jsongeo)
    {
       NSString *resultgeo = [[[jsongeo objectForKey:@"results"] objectAtIndex: 0] objectForKey:@"formatted_address"] ;
    }

    dispatch_sync(dispatch_get_main_queue(), ^
    {     
        cell.distanceLabel.text = result;
    });
});

ここに私が得ているエラーがあります: キャッチされていない例外 'NSRangeException' によるアプリの終了、理由: ' * -[__NSArrayI objectAtIndex:]: インデックス 0 が空の配列の境界を超えています' *最初のスロー コール スタック: (0x289a012 0x2210e7e 0x284fb44 0x1318c 0x57f953f 0x580b014 0x572fce 0x57fc450 0x9112ae72 0x91112d2a)

ここで範囲例外を防ぐにはどうすればよいですか?

4

1 に答える 1