我有一个搜索栏,用户可以在其中搜索地址。每次更改输入的文本时,都会调用选择器,搜索新地址并将其存储到 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;
}
谢谢您的帮助!
干杯