Я использую API геокодирования Google и API-интерфейс расстояния в асинхронном потоке в моем приложении. Но он выдаёт исключение NSRangeException. Вот мой код:NSRangeException за пределами границ после вызова JSON
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 0x57fc2e8 0x57fc450 0x9112ae72 0x91112d2a)
Как предотвратить Range Exception здесь?
Пожалуйста, отформатируйте код, который вы публикуете, используйте отступ и т. Д. –
Три раза вы делаете 'objectAtIndex: 0', размещаете точку останова и печатаете' json' и 'jsongeo' и рассказываете, что вы видите. Вероятно, это будет один из них. –