Я заполняю таблицу с результатами, полученными из Google Places.По большей части, это прекрасно работает.Однако, очень часто, когда я нажимаю на выделение (didSelectRowAtIndexPath), мое приложение вылетает, заявляя, что searchArray пуст.
- [__ NSArrayM objectAtIndex:]: индекс 3 за пределами для пустого массива '
Я регистрирую его, и это правильно.Однако этого не происходит КАЖДЫЙ раз, когда я делаю выбор, только каждый раз searchArray кажется пустым, когда я нажимаю на выбор.Любая идея, почему searchArray очищается иногда при достижении didSelectRowAtIndexPath?См. Код ниже.
ОБНОВЛЕНИЕ! Я только что обнаружил причину своего сбоя. Похоже, что я ввел более определенного количества символов, GooglePlaces возвращает 0 результатов в searchArray, что приводит к сбою.Однако, если я наберу только 3 символа и затем нажму на результат, searchArray заполняется.Любая идея, как я могу включить поиск с большим количеством символов?
ViewController.m
- (void)LoadJson_search{
searchArray=[[[NSMutableArray alloc]init]mutableCopy];
// NSLog(@"str......%@",strSearch);
// This API key is from https://developers.google.com/maps/web/
/* NSString *str1 = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/queryautocomplete/json?input=%@&types=street_address&location=49.266912500000004,-123.09886619999999&radius=2500000&strictbounds&key=MYKEY", strSearch];*/
NSString *str1 = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/queryautocomplete/json?input=%@&types=street_address&location=49.266912500000004,-123.09886619999999&radius=25000&strictbounds&key=MYKEY", strSearch];
NSURL *url = [NSURL URLWithString:str1];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error=nil;
if(data.length==0)
{
}
else
{
NSDictionary *jsondic= [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
// NSLog(@"1,,,,%@",jsondic);
[searchArray removeAllObjects];
if([[jsondic objectForKey:@"status"]isEqualToString:@"ZERO_RESULTS"])
{
}
else if([[jsondic objectForKey:@"status"]isEqualToString:@"INVALID_REQUEST"])
{
}
else
{
for(int i=0;i<[[jsondic objectForKey:@"predictions"] count];i++)
{
NSString *str1=[[[jsondic objectForKey:@"predictions"] objectAtIndex:i] objectForKey:@"description"];
[searchArray addObject:str1];
}
self.tableView.hidden = NO;
// NSLog(@"%@", searchArray);
}
if (searchArray.count == 0) {
self.tableView.hidden = YES;
}else{
[self.tableView reloadData];
}
}
}
//TableView delegates
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return searchArray.count;
}
-(UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
if(!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = [[searchArray objectAtIndex:indexPath.row] mutableCopy];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"TAPPED CELL %@", searchArray);
self.addressField.text = [searchArray objectAtIndex:indexPath.row];
self.tableView.hidden = YES;
}