不断更新UITableView问题

时间:2012-12-03 21:58:12

标签: iphone xcode uitableview uisearchbar updating

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

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

调用
[searchTableView reloadData] 
将新地址添加到数组后

一旦找到第一个地址,就进入数组并调用searchTableView,应用程序崩溃并显示以下消息:

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

原因:'UITableView dataSource必须从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; 
}

感谢您的帮助!

干杯

1 个答案:

答案 0 :(得分:0)

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

savedTableView searchTableView方法中cellForRowAtIndexPath应为(tableVieww != savedTableView)


你应该有其他条件 - &gt;如果- (UITableViewCell *)tableView:(UITableView *)tableVieww cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableVieww == savedTableView) { .... } else { // Initialize cell here as well } } 会发生什么?

{{1}}