我很对, 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;
}
答案 0 :(得分:2)
首先,永远不要在cellForRowAtIndexPath
中注册单元格。如有必要,请在viewDidLoad
注册您的单元格(一次)。
发生错误的原因是,如果cell
为nil.
更方便的方法是使用另一个dequeueReusableCellWithIdentifier
方法(dequeueReusableCellWithIdentifier:forIndexPath:
),它总是返回一个非空的有效单元格。不需要检查nil
。进一步将细胞转移到子类。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
GSDischargeListCell *cell = (GSDischargeListCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath: indexPath];
if (_searchController.active && ...
}