让我简要介绍我的应用程序,我有根视图Tab Bar控制器(5个选项卡),第1个视图是导航控制器;它是一个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);
}
}
现在问题是这个代码在我启动应用程序时非常有效旋转它但当我进入导航并从导航返回时,应用程序在进一步旋转时崩溃。
THREAD 1 EXE BAD ACCESS,0x1bd109b:movl 8(%edx),%edi
任何人都可以提出这个奇怪的崩溃错误的地方.. ???
答案 0 :(得分:0)
使用静态分析仪检查代码是否有泄漏。我看到的第一件事是你正在使用一个自动释放的对象初始化ivar _headerScenarioIDLabel
- 你需要解决这个问题,因为ivar应该拥有一个指向标题视图的强指针。另请注意,方法-tableView:viewForHeaderInSection:
可以多次调用,这就是为什么在重新设置之前需要释放此ivar的原因。解决所有这些问题的简单方法是使用属性 ...和始终使用属性,尤其是在使用手动内存管理时。