NSArray objectAtIndex索引0超出空数组的边界

Pau*_*aul 3 arrays objective-c ios ios8

我正在研究别人的应用程序而且我收到了这个错误:

'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 
 beyond bounds for empty array'
Run Code Online (Sandbox Code Playgroud)

Xcode指向这一行:

 NSDictionary *geo = [response[0] objectForKey:@"geometry"];
Run Code Online (Sandbox Code Playgroud)

这是完整的方法:

- (void)loadLatLong {

indx ++;
if (indx == [datalist count]) {
    [self showMarker];
//        self.alertView.hidden = true;
//        [self setThreeQuarters];
    [self.progressbar setProgress:1.0 animated:YES];
    return;
}
PointClass *pt = datalist[indx];
NSString *stPt = [pt.Location stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *str = [stPt stringByReplacingOccurrencesOfString:@" " withString:@"+"];
NSString *url = [NSString stringWithFormat:@"https://maps.google.com/maps/api/geocode/json?address=%@&sensor=false&key=AIzaSyAoSBH8mBmeVp2HVx6vJrkTvl3bjRFiWag",str];

NSURL *urlString = [NSURL URLWithString:url];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
[manager GET:[urlString absoluteString ]parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSArray *response = [responseObject objectForKey:@"results"];
    NSDictionary *geo = [response[0] objectForKey:@"geometry"];
    NSDictionary *location = [geo objectForKey:@"location"];

    pt.lat = [[location objectForKey:@"lat"] doubleValue];
    pt.lng = [[location objectForKey:@"lng"] doubleValue];
    datalist[indx] = pt;
    NSLog([NSString stringWithFormat:@"%%d \n"], indx);
    [self loadLatLong];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

  }];
}
Run Code Online (Sandbox Code Playgroud)

无法弄清楚在哪里更改代码.

更新:我想补充一点,它有时只会崩溃,有时它会加载

das*_*ght 8

该代码假设response数组总是至少有一个元素.当数组为空时,这会中断,因此您需要添加代码来检查它:

NSArray *response = [responseObject objectForKey:@"results"];
if (response.count == 0) {
    // Continue loading more data:
    [self loadLatLong];
    return;
}
NSDictionary *geo = [response[0] objectForKey:@"geometry"];
Run Code Online (Sandbox Code Playgroud)