gpt4 book ai didi

iphone - 由于僵尸对象,向下滚动会导致具有自定义 UITableViewCell 的 UITableView 上的应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 04:02:12 26 4
gpt4 key购买 nike

我有这个代码:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"BSTGListCell";

BSTGListCell *cell = (BSTGListCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
cell = [[[NSBundle mainBundle] loadNibNamed:@"BSTGListCell" owner:self options:nil] objectAtIndex:0];
}

PFObject* currentEl = [self.tableData objectAtIndex:indexPath.row];

cell.title.text = [currentEl objectForKey:@"Name"];
cell.description.text = [currentEl objectForKey:@"Address"];
return cell;
}

向下滚 Action 为 subview 添加的 TableView 时,我收到“消息发送到已释放的实例”。僵尸检查员说访问的对象保留在这里:

cell = [[[NSBundle mainBundle] loadNibNamed:@"BSTGListCell" owner:self options:nil] objectAtIndex:0];

并且可能由 ARC 发布。为什么会发生这种情况以及如何防止它?

最佳答案

你真的不应该这样做。从 Nib 使用单元格的方法是注册 Nib ,可能在 viewDidLoad 中,如下所示:

UINib *nib = [UINib nibWithNibName:@"BSTGListCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"BSTGListCell"];

然后在 cellForRowAtIndexPath 中,使用 dequeueReusableCellWithIdentifier:forIndexPath: 并且不使用 if(cell == nil) 子句。

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

BSTGListCell *cell = (BSTGListCell *)[tableView dequeueReusableCellWithIdentifier:@"BSTGListCell" forIndexPath:indexPath];

PFObject* currentEl = [self.tableData objectAtIndex:indexPath.row];

cell.title.text = [currentEl objectForKey:@"Name"];
cell.description.text = [currentEl objectForKey:@"Address"];
return cell;
}

您的代码的实际问题是 loadNibNamed:owner:options 返回一个数组,并且您必须在将其分配给单元格之前从该数组中获取一个对象。但是,无论如何,我展示的方法是一种更有效的方法。

关于iphone - 由于僵尸对象,向下滚动会导致具有自定义 UITableViewCell 的 UITableView 上的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720488/

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