deselectRowAtIndexPath:在iOS5中失败

时间:2011-10-19 05:34:45

标签: objective-c ios memory-management xcode4

以下在iOS 4.3中运行良好但在iOS5中抛出EXC_BAD_ACCESS。

if(mainTable != nil){
    [mainTable deselectRowAtIndexPath:currentIndexPath animated:YES];

mainTable的类型为UITableView。它使用deselectRowAtIndexPath:在行上失败。离开主(第一)表视图时会发生上述异常。步骤如下:单击主表视图中的一行。显示另一个表视图。单击左上角按钮返回主表,发生异常。

实际上,到时候

 - (void)viewDidDisappear:(BOOL)animated

是通过断点命中的,currentIndexPath已经在iOS5中发布。

我在这里可以找到什么?我知道iOS5在发布对象时会做一些不同的事情。也许我可以做一些额外的检查,但我不知道从哪里开始。

编辑: 它被定义为

currentCellIndex = indexPath;   

来自

-(void) displaySubView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath

我确实在我的方案的Run部分启用了僵尸,现在获取详细信息。当我点击上面一行时,我会在控制台中看到:

*** -[NSIndexPath isEqual:]: message sent to deallocated instance 0x85a2010

为什么会在iOS5中而不是在iOS 4.3中发生?我在currentIndexPath的dealloc中有一个断点,它永远不会被命中。

我开始相信这与ARC有关。我还有很多保留/发布。我不想为ARC做自动格式,因为这会导致更多问题。我确实尝试了用于基于每个文件禁用ARC的标志。这只是用未知命令引发编译器错误。

1 个答案:

答案 0 :(得分:3)

这不是您问题的准确答案,但您可能需要考虑在viewWillAppear中取消选择行:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [mainTable deselectRowAtIndexPath:[mainTable indexPathForSelectedRow] animated:YES];
}

您需要在“父”视图控制器中实现此功能,其中声明了mainTable

关于您的实际问题,您能否告诉我们@property如何查找currentCellIndex