UITableView selectRowAtIndexPath的断言失败

时间:2012-03-10 06:09:25

标签: ios uitableview nsindexpath

我觉得这是一个需要特别注意的问题...我的Google-fu非常好,但我没有得到任何有用的东西。

这是最简单的事情,但我似乎无法弄清楚问题是什么。

我有一个UITableView。这是我的VC调用_form的子视图。我将它用于样式目的,而不是真正用于显示数据。它有2个单元格。

在某个事件上,我正在尝试使用selectRowAtIndexPath:animated:scrollPosition选择不同的单元格。

当我这样做时,它是SIGABRTS。

一个简单的例子:

- (IBAction)submitClicked:(id)sender
{
    [_submit setTitle:@"Wha!?" forState:UIControlStateNormal];
    NSIndexPath *row = [NSIndexPath indexPathWithIndex:0];
    NSLog(@"%d", [[_form indexPathForSelectedRow] row]);
    [_form selectRowAtIndexPath:row animated:YES scrollPosition:YES];
}

按钮的标题已更改,并且该表打印所选行为0或1,但在尝试选择所需的单元格时,它会中断:

2012-03-09 21:57:39.905 <omitted>[16329:207] 0
2012-03-09 21:57:39.908 <omitted>[16329:207] *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableViewSupport.m:2598
(gdb)

我的假设是,这意味着我的表格配置方式有问题,但我不确定是什么。通常(单击它)选择表格中的单元格正在工作,如我的tableView:didSelectRowAtIndexPath中的预期响应所示。除了这个以外,其他所有设置工作正常。

(另外,我的其他人回复了额外的调试信息,而不只是“(gdb)”。我怎么能得到这个?)

谢谢!

1 个答案:

答案 0 :(得分:18)

tableview单元格的索引路径需要同时包含行和节。尝试使用工厂方法(在NSIndexPath UIKit Additions中定义)创建索引路径,而不是:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[_form selectRowAtIndexPath:indexPath animated:YES scrollPosition:YES];