【发布时间】:2013-01-08 08:23:54
【问题描述】:
让我简要介绍一下我的应用,我有根视图标签栏控制器(5 个标签),第一个视图是导航控制器;它是一个 iPad 应用程序。现在我有一个表格视图,我正在通过 CODE 制作标题。
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
_headerScenarioIDLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
//and many more declarations here
}
并相应地旋转视图
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if (UIInterfaceOrientationIsLandscape(fromInterfaceOrientation))
{// for portrait.
_headerScenarioIDLabel.frame = CGRectMake(-30, 2, 125, 20);
}
else
{ // for LandScape
_headerScenarioIDLabel.frame = CGRectMake(-26, 2, 125, 20);
}
}
现在的问题是,当我启动应用程序并旋转它时,这段代码运行良好,但是当我进入导航并从导航返回时,应用程序在进一步旋转时崩溃。
线程 1 EXE 访问错误,0x1bd109b:movl 8(%edx),%edi
任何人都可以建议我在这个奇怪的崩溃中哪里错了.. ???
【问题讨论】:
-
您是否检查过
BAD ACCESS是否是由于_headerScenarioIDLabel?尝试注释掉与_headerScenarioIDLabel相关的代码,看看它是否仍然崩溃。 -
是的,评论代码它工作正常..
-
那么看来
_headerScenarioIDLabel已经是autoreleased并且您正在尝试访问旧地址位置。您应该确保再次检索_headerScenarioIDLabel的当前值,然后再对其执行任何更多操作以进行自动旋转。 -
是的,自动释放是崩溃的根本原因。但是伙计,我对编码不太熟悉,你能告诉我如何做到这一点.. 在此先感谢 :)
-
如果不查看整个代码,这很难做到。您必须自己调试它,并尝试确保
_headerScenarioIDLabel是not 发布的,或者它拥有正确的标签地址。同时你应该注意内存泄漏。