0

ユーザーが住所を検索する検索バーがあります。入力されたテキストが変更されるたびにセレクターが呼び出され、新しいアドレスが検索されて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; 
}

助けてくれてありがとう!

乾杯

4

1 に答える 1

0

エラーは、メソッドでセルを返していないためですcellForRowAtIndexPath

メソッド内にあるsavedTableView必要があります。searchTableViewcellForRowAtIndexPath


あなたはelse条件を持っているべきです - >何が起こるか(tableVieww != savedTableView)?

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

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