gpt4 book ai didi

objective-c - 引入 if() 时未使用的变量

转载 作者:行者123 更新时间:2023-11-28 18:26:37 28 4
gpt4 key购买 nike

我目前正在使用一本书学习 UITableViewCell。为了在滚动时重用单元格,作者要求修改原始代码以包含一个if()。检查特定重用标识符的单元格是否存在的语句。但是,在添加 if() 之后语句,Xcode 会抛出一条警告 Unused variable 'cell'if(!cell) 内的线上.运行代码时,出现错误 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'是不是出了什么问题?

原始代码

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

UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"UITableViewCell"] autorelease];
Possession *p = [[[PossessionStore defaultStore] allPossessions] objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[p description]];

return cell;
}

修改后的代码

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Check for reusable cell first, use that if it exists
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];

// If there is no reusable cell of this type, create a new one
if (!cell) {
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"UITableViewCell"] autorelease];
}

Possession *p = [[[PossessionStore defaultStore] allPossessions] objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[p description]];

return cell;
}

最佳答案

我认为您必须将 UITableViewCell * 放在条件 block 中。否则,您将在 block 内声明一个新的 cell 变量并将其丢弃,而不是分配给上面声明的单元格。 (编译器没有警告你吗?)整体逻辑应该是:

UITableViewCell *cell = /* try to get a cached one */
if (cell == nil) {
cell = /* there was no cached cell available, create a fresh one */
}
/* …more code… */
/* and finally return the created cell */
return cell;

关于objective-c - 引入 if() 时未使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689650/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com