Obj-C-选定表视图后,数组返回空值(有时)?

时间:2019-05-03 20:26:23

标签: ios objective-c uitableview

我正在用从Google地方信息中提取的结果填充表格视图。在大多数情况下,它都很棒。但是,每当我点击一个选择(didSelectRowAtIndexPath)时,我的应用程序都会崩溃,并指出searchArray为空。

  

-[__ NSArrayM objectAtIndex:]:索引3超出了空数组的范围'

我将其记录下来,这是正确的。但是,这并非每次我进行选择时都发生,只有在我轻按选择项时,searchArray才会经常为空。知道为什么有时在到达didSelectRowAtIndexPath之后会清除searchArray吗?参见下面的代码。

更新! 我刚刚发现崩溃的原因。似乎我输入的字符数超过了一定数量,Google地方信息会向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;

}

0 个答案:

没有答案