EXC_BAD_ACCESS 仅在从 UITableView 中一直向下滚动返回时
Posted
技术标签:
【中文标题】EXC_BAD_ACCESS 仅在从 UITableView 中一直向下滚动返回时【英文标题】:EXC_BAD_ACCESS only when returning from scrolling all the way down in a UITableView 【发布时间】:2013-12-14 22:34:22 【问题描述】:EXC_BAD_ACCESS(代码=1,地址=0x71474b80)
当用户在嵌套的 UITableView 中一直向下滚动返回时会出现此错误。如果我不滚动到底部,则不会发生错误。
可能存在按照建议的释放问题
UIViewTableController: "EXC_BAD_ACCESS" When Scrolling Up/Down Past the Max Position of the Table
我的代码是:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"TroncalesInfo";
TroncalesViewCell *cell = [[TroncalesViewCell alloc]init];
cell = [tabla dequeueReusableCellWithIdentifier:CellIdentifier];
cell.IDTroncal = [nombresTroncales objectAtIndex:indexPath.row];
[cell setCellAtributes:indexPath db:dataBase];
return cell;
【问题讨论】:
【参考方案1】:这是我经常使用的一个小技巧。我不知道它为什么会起作用,但请尝试一下;)。
在你的 viewController 的 viewWillDisappear 中插入这个:
tabla.delegate = nil;
【讨论】:
你是对的亚伦。抱歉没有解释。在我看来,视图控制器或表的委托在视图滚动时被释放(scrollViewDidScroll?)。由于 UITableView 继承自 UIScrollView,强制它为 nil 取消所有对 UITableViewDelegate 协议的调用,包括 scrollViewDidScroll。如果我错了亚伦,请纠正我。【参考方案2】:我不知道这是否是您的问题的根源,但是这段代码:
TroncalesViewCell *cell = [[TroncalesViewCell alloc]init];
cell = [tabla dequeueReusableCellWithIdentifier:CellIdentifier];
应该更接近这个:
TroncalesViewCell *cell = [tabla dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell)
cell = [[TroncalesViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
我认为您现有的代码可能会返回一个nil
单元格,这会引发异常。现在,您正在毫无意义地初始化一个单元格,然后将其丢弃并用另一个单元格替换。
【讨论】:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath static NSString *CellIdentifier = @"TroncalesInfo"; TroncalesViewCell *cell = [tabla dequeueReusableCellWithIdentifier:CellIdentifier]; if(!cell) cell = [[TroncalesViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.IDTroncal = [nombresTroncales objectAtIndex:indexPath.row]; [单元集CellAtributes:indexPath db:dataBase];返回单元格; 这样做了,但还是不行!!! 使用 Objective-C 启用僵尸对象检查:D [TroncalesViewController scrollViewDidScroll:]: 消息发送到已释放实例 0x18462d40 看起来你的 tableview 在它仍然可见的时候被释放了。你有强烈的参考吗?【参考方案3】:从崩溃日志来看,TroncalesViewController 的委托似乎在不应该的时候被重新分配。您可以检查以确保在滚动视图时 TroncalesViewController 的委托仍然存在。
【讨论】:
以上是关于EXC_BAD_ACCESS 仅在从 UITableView 中一直向下滚动返回时的主要内容,如果未能解决你的问题,请参考以下文章
EXC_BAD_ACCESS 仅在运行 iOS 8 的 xcode 8 上
读取 NSFetchedResultsController 的 fetchedObjects 属性时出现 EXC_BAD_ACCESS 错误(仅在模拟器上)
Nativescript throwing Thread 1: EXC_BAD_ACCESS (code=1, address=0x1edf38) 仅在 Xcode