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