从预期返回非空值的方法返回Null(UITableViewCell)

时间:2017-07-11 10:49:55

标签: objective-c uitableview tableview

我很对, 1)使细胞出列 2)检查无 3)根据情况设置单元数据 并返回细胞。

这段代码有什么问题?我究竟做错了什么?只需查看nil即可。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
GSDischargeListCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (!cell) {
    [tableView registerClass:[GSDischargeListCell class] forCellReuseIdentifier:cellIdentifier];
}

if (_searchController.active && ![_searchController.searchBar.text  isEqual: @""] ) {
    GSDischargePatient *patient = searchResultsArray[indexPath.row];
    [cell setCellData:patient];
} else {
    GSDischargePatient *patient = datasourceArray[indexPath.row];
    [cell setCellData:patient];
}
   _totalHeight = [cell estimatedHeightOfCell];

   return cell;
}

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,永远不要在cellForRowAtIndexPath中注册单元格。如有必要,请在viewDidLoad注册您的单元格(一次)。

发生错误的原因是,如果cellnil.

,您只是注册一个单元格而不是创建一个单元格

更方便的方法是使用另一个dequeueReusableCellWithIdentifier方法(dequeueReusableCellWithIdentifier:forIndexPath:),它总是返回一个非空的有效单元格。不需要检查nil。进一步将细胞转移到子类。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     GSDischargeListCell *cell = (GSDischargeListCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath: indexPath];

     if (_searchController.active && ... 
}