以下在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的标志。这只是用未知命令引发编译器错误。
答案 0 :(得分:3)
这不是您问题的准确答案,但您可能需要考虑在viewWillAppear
中取消选择行:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[mainTable deselectRowAtIndexPath:[mainTable indexPathForSelectedRow] animated:YES];
}
您需要在“父”视图控制器中实现此功能,其中声明了mainTable
。
关于您的实际问题,您能否告诉我们@property
如何查找currentCellIndex
?