Tableview仅在第二次调用后使用新数据重新加载

时间:2013-12-19 13:30:08

标签: ios objective-c json cocoa-touch

我有一个带有搜索栏的tableview,它应该在搜索栏中输入时将数据加载到单元格中。我的代码确实使用带回调的函数加载数据。将数据打印到控制台会显示正确的搜索结果,但在调用reloadData方法后,单元格不会刷新。当键入另一个字符并加载新数据时,tableview将刷新上一个请求中的数据。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _teams.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"TeamCell";
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier];

    TeamModel *team = _teams[indexPath.row];
    cell.textLabel.text = team.name;

    return cell;
}

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
    NSLog(@"%@", searchText);

    poolDataHandler = [[PoolDataHandler alloc] init];
    [poolDataHandler GetTeams:searchText completion:^(NSArray *tempteams) {
        _teams = tempteams;
        NSLog(@"%@", _teams);
        [self.tableView reloadData];
    }];
}

请注意,我正在使用模型类来解析JSON结果。

此外,似乎行计数确实更新,因为当结果小于上一个查询时,它会崩溃。对此有任何想法将不胜感激!

更新 当我取消搜索时,它会刷新初始结果。我必须遗漏一些基本的东西......

1 个答案:

答案 0 :(得分:0)

傻傻的我,我不知道搜索栏和搜索显示器有自己的tableview ...以下对我有用,使用默认的重载功能,将其设置为不立即重新加载,然后手动重新加载正确的tableview in回调:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller         shouldReloadTableForSearchString:(NSString *)searchText {
    poolDataHandler = [[PoolDataHandler alloc] init];
    [poolDataHandler GetTeams:searchText completion:^(NSArray *tempteams) {
        _teams = tempteams;
        [self.searchDisplayController.searchResultsTableView reloadData];
    }];

    return NO;
}