滚动视图时EXC_BAD_ACCESS

时间:2012-02-10 18:17:06

标签: objective-c ios uitableview uiscrollview exc-bad-access

我有两个视图:第一个是普通样式的UITableView(以编程方式创建);第二个是UIScrollView,其中包含图像和分组样式的UITableView(也是以编程方式创建的)。

当我从firstView导航时 - > secondView一切正常。但是,如果我回到firstView,然后我尝试第二次导航firstView - > secondView,我会收到EXC_BAD_ACCESS错误。

更新

这是UITableView中<{1}}代理人的代码:

secondView

2 个答案:

答案 0 :(得分:1)

EXC_BAD_ACCESS不是由一个视图进展到下一个视图引起的。相反,它将是那些视图的属性,或视图对象本身的创建和释放 - 或者不是 - 应该归咎于它们。

您的第一步是运行分析器。然后,如果你已经修复了所有这些并且仍然存在问题,请开始在Instruments中运行Leaks工具。

有关解决EXC_BAD_ACCESS问题的详细信息,以及导致这些错误的原因的详尽链接以及有关如何修复的分步说明,请查看这些问题的答案:

finding reason for EXC_BAD_ACCESS - in Xcode4

Random EXC_BAD_ACCESS in a place that it cannot happen

在您的情况下,当您返回secondView时,我会专门了解您如何创建firstView以及如何使用secondView

答案 1 :(得分:1)

我花了一周的时间来跟踪一个大型应用中的EXC_BAD_ACCESS问题,该应用在将其转换为ARC之前工作正常。我会在“switch”结构的右括号上得到EXC_BAD_ACCESS。然而,NSZombieEnabled和各种仪器设置不会检测到任何东西。

固定它的原因是在箱子周围放置了一些能够产生差异的曲线。我为他们每个人做了这件事,虽然它可能只对某些人来说很重要,即

在:

case ...:
 stmt;
 stmt;
 break;

后:

case ...:{
 stmt;
 stmt;
 }break;

这解决了我在大型应用中的两个地方的问题。我知道我读过关于ARC和switch / case的某些内容(可能有人可以添加链接),但我不明白为什么会发生这种情况以及为什么这个修复工作的理论。也许有人可以解释。 (后来:在openradar上阅读下面的参考文献之后,这一切都有道理 - 在case语句之间生成的“清理代码”中出现了错误 - 生成了一个虚假的“release”,很快就会导致{{1 }。)

我也发现了这一点,可能与此有关:http://openradar.appspot.com/11329693