滚动 UITableView 时出现错误的 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】滚动 UITableView 时出现错误的 EXC_BAD_ACCESS【英文标题】:Bad EXC_BAD_ACCESS when scrolling through UITableView 【发布时间】:2012-05-26 09:36:13 【问题描述】:

我使用以下代码启动了一个 UITableView:

ProductTableView *tableProd = [[ProductTableView alloc]initWithNibName:@"ProductTableView" bundle:nil];

xib 文件确实存在!

由于我在单独的 UIView 中显示此表,因此我通过以下方式将其添加到此屏幕:

[content addSubview:tableProd.view];

我使用xcode创建了一个标准的UITableView,并设置了以下功能:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

   return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

   return 10;


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

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   
   cell.textLabel.text = @"test";    
   return cell;

该表显示在模拟器中,其中 10 行填充了测试。但是,当我开始滚动并且第一个单元格离开屏幕时,模拟器会因 EXC_BAD_ACCESS 错误而崩溃。我尝试使用 Instruments 来检测 NSZombie 并且软件标记了僵尸。不幸的是,我无法将此错误追溯到原因。

有人知道这里出了什么问题吗?

【问题讨论】:

您是否检查过重用标识符已设置并且与 xib 中的代码相同? 请粘贴您的tableview的didselect方法。 Stacktrace 说在您的代码中调用了“didSelectRowAtIndexPath:”。你能显示这个委托回调吗? 【参考方案1】:

如果您将视图控制器的视图添加为另一个视图控制器视图的子视图,我猜想 ProductTableView 视图控制器正在被释放(因为添加为子视图会保留视图,但不会保留视图控制器属于)

将 ProductTableView 视图控制器添加为容器视图控制器的属性,以便保留

【讨论】:

以上是关于滚动 UITableView 时出现错误的 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

JSON 和 Iphone 表加载,滚动时出现 EXC_BAD_ACCESS 错误

EXC_BAD_ACCESS 仅在从 UITableView 中一直向下滚动返回时

禁用 UITableview 滚动时出现问题

无限滚动 UITableView 在从服务器检索数据后向上滚动时出现故障

部分的 UITableView 标题仅在向下滚动时出现

添加单元格和使用 UITableView 滚动时出现图形故障