我相信这是一个通用错误,但我需要帮助来克服它。 EXC_BAD_ACCESS 表视图,ios 内容
Posted
技术标签:
【中文标题】我相信这是一个通用错误,但我需要帮助来克服它。 EXC_BAD_ACCESS 表视图,ios 内容【英文标题】:I believe this is a generic error but I need help getting past it. EXC_BAD_ACCESS table view, ios content 【发布时间】:2012-12-31 20:53:49 【问题描述】:我已经环顾四周,这个错误似乎与完全不同的问题有关。这是我的代码片段,如果您可能需要更多,请告诉我。这是使用 UITableView
设置表格最后一个单元格的大小。
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
int returnValue = 44;
int numRows = [tableView numberOfRowsInSection:[indexPath section]];
if (!([indexPath row] == numRows - 1))
returnValue = 60;
return returnValue;
我已经注释掉了代码中的所有行,发现[tableView numberOfRowsInSection:[indexPath section]]
抛出了错误。有什么想法吗?
编辑:看起来每次您调用 tableView 时,它都会重绘所有调用此方法的单元格,该方法调用此方法令人作呕。我在该方法的文档中找到了这一点:
“每次显示表视图时,它都会在委托上为其每一行调用tableView:heightForRowAtIndexPath:
,这可能会导致具有大量行(大约 1000 或更多)的表视图出现严重的性能问题。 "
这是否意味着我不能调用这些方法?
编辑 2: 找到我的答案here
【问题讨论】:
完整的错误信息和回溯是什么?如果您尚未添加异常断点以获得更好的错误信息。 可能是您从numberOfSectionsInTableView:
返回的部分数量错误?这会导致您超出表格范围。
完整的消息是Thread 1: EXC_BAD_ACCESS(code=2, address=0xbf7fffc)
。我的 numberOfSectionsInTableView 只是 return 2
。
我认为numberOfRowsInSection:
是这里的问题,而不是numberOfSectionsInTableView:
,因为在崩溃中出现的是前者。 那个是做什么的?
它有点复杂,但我很肯定这部分有效。我在搞砸的方法之前输入了NSLog(@"row: %i, section: %i", [indexPath row], [indexPath section]);
。它只是一遍又一遍地打印出row: 0, section: 1
数百次。
【参考方案1】:
该错误始终表明一件事:您的应用程序试图访问它无权访问的内存。这通常会转化为您的应用程序试图取消引用错误的指针。在这种情况下,坏指针是tableView
或indexPath
。检查它们是否为 NULL 或者它们是否已经被释放(打开 NSZombies 可以帮助查看它们是否已经被释放)。
【讨论】:
所以我输入了两个 NSLog 描述,在方法调用的每一次传递中都给出了两个地址。tableView: <UITableView: 0x7b76800; frame = (0 20; 320 548); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7122e40>; layer = <CALayer: 0x7121d40>; contentOffset: 0, 0>
.
在这些情况下它会崩溃吗?如果是这样,也许表格视图或索引路径中的某些内容不好?【参考方案2】:
.h 文件中是否有任何属性声明为 tableView。如果是这样,您可以尝试在函数中修改本地 UITableView 变量的名称。除此之外,我认为 Peter 关于 numberOfSectionsInTableView: 返回值可能是正确的。
【讨论】:
我修改了本地名称,但仍然遇到同样的问题。不过,这是个好建议;我没想到。【参考方案3】:希望你的代码中的问题是
int numRows = [tableView numberOfRowsInSection:[indexPath section]];
希望在部分中设置行数,您可能有一些数组,其计数返回 os 一些静态值。因此,要获取行数,请使用该数组计数或该静态值。 希望它可以解决您的问题。
【讨论】:
以上是关于我相信这是一个通用错误,但我需要帮助来克服它。 EXC_BAD_ACCESS 表视图,ios 内容的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助让按钮在 Adobe Flash 中播放多种声音