2013-01-08 45 views
0

让我简单介绍一下我的应用程序,我有根视图选项卡栏控制器(5个选项卡),第一视图是一个导航控制器;它的iPad应用程序。现在我有一个表格视图,我通过CODE制作标题。应用程序在iPAD的任一方向旋转设备时崩溃

- (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%

可以在任何一个地方提出我错了,对于这个奇怪的崩溃.. ???

+0

您是否检查'BAD ACCESS'是否归因于'_headerScenarioIDLabel'?尝试注释与'_headerScenarioIDLabel'相关的代码并查看它是否仍然崩溃。 –

+0

是在评论它的工作正常的代码。 –

+1

然后,似乎'_headerScenarioIDLabel'已'autoreleased',你正试图访问旧的地址位置。您应该确保在对自动旋转执行任何更多操作之前,再次检索'_headerScenarioIDLabel'的当前值。 –

回答

0

检查你的代码与静态分析仪的泄漏。我还看到的第一件事情是,您正在使用自动释放对象初始化ivar _headerScenarioIDLabel - 您需要解决此问题,因为ivar应该持有指向标题视图的强指针。同时请记住,方法-tableView:viewForHeaderInSection:可能会被多次调用,这就是为什么您需要在再次设置之前释放此ivar。所有这些问题的简单解决方案是使用属性 ...和总是使用属性,特别是在使用手动内存管理时。

+0

好孩子删除autorelease后它没有崩溃的作品:)。 ,我也用过属性。现在如你所说tableView:viewForHeaderInSection:方法可以被调用多次,那么如何使用这个?和取消autorelease应用程序已锁定到启动方向(旋转标题标签剂量变化)。我不太熟悉编码,所以请多给点细节。 –

相关问题