0

我有一个搜索栏,用户可以在其中搜索地址。每次更改输入的文本时,都会调用选择器,搜索新地址并将其存储到 NSMutableArray 中。到目前为止,这非常有效。

在搜索栏下,我有一个 UITableView,每次都会被调用

[searchTableView reloadData] 

在将新地址添加到数组中之后。

找到第一个地址后,将其放入数组并调用 searchTableView 应用程序崩溃并显示以下消息:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 

原因:'UITableView 数据源必须从 tableView 返回一个单元格:cellForRowAtIndexPath:'

这是我正在使用的代码:

 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{ 

      list = [[NSMutableArray alloc]init];

[geoCoder geocodeAddressString:self.addressSearch.text
             completionHandler:^(NSArray* placemarks, NSError* error){
                 for (CLPlacemark* aPlacemark in placemarks)
                 {

                     for (int i=0; i<[placemarks count]; i++) {

                         NSString *temp = [NSString stringWithFormat:@"%@",[[[[placemarks objectAtIndex:i]addressDictionary] valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]];

                         [list addObject:temp];

                         [searchTableView reloadData];


                         NSLog(@"List: %@", list);
                     }

                 }
             }]; 
}



- (UITableViewCell *)tableView:(UITableView *)tableVieww cellForRowAtIndexPath:(NSIndexPath *)indexPath {

...

if (tableVieww == savedTableView) {

    UIView *bgColor;

    cell = [self.savedTableView dequeueReusableCellWithIdentifier:[list objectAtIndex:indexPath.row]];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[list objectAtIndex:indexPath.row]];
        cell.accessoryType = UITableViewCellAccessoryNone;

        bgColor = [[UIView alloc] initWithFrame:cell.frame];
        [cell addSubview:bgColor];
        [cell sendSubviewToBack:bgColor];

    }

    cell.textLabel.text = [list objectAtIndex:indexPath.row];
    cell.textLabel.backgroundColor = [UIColor clearColor];

    cell.textLabel.textColor = [UIColor whiteColor];


    if (indexPath.row % 2 == 0){
        bgColor.backgroundColor = [UIColor colorWithRed:098.0f/255.0f
                                                  green:211.0f/255.0f
                                                   blue:182.0f/255.0f alpha:0.90f];
    } else {
        bgColor.backgroundColor = [UIColor colorWithRed:230.0f/255.0f
                                                  green:089.0f/255.0f
                                                   blue:128.0f/255.0f alpha:0.90f];
    }

}

return cell; 
}

谢谢您的帮助!

干杯

4

1 回答 1

0

该错误是因为您没有在cellForRowAtIndexPath方法中返回任何单元格。

savedTableView应该在方法searchTableView中。cellForRowAtIndexPath


你应该有 else 条件 -> if 会发生什么(tableVieww != savedTableView)

- (UITableViewCell *)tableView:(UITableView *)tableVieww cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (tableVieww == savedTableView) {
         ....
    } else {
         // Initialize cell here as well
    }
}
于 2012-12-03T22:26:20.567 回答