UITableView selectRowAtIndexPath 的断言失败

Posted

技术标签:

【中文标题】UITableView selectRowAtIndexPath 的断言失败【英文标题】:Assertion Failure for UITableView selectRowAtIndexPath 【发布时间】:2012-03-10 06:09:25 【问题描述】:

我觉得这是一个需要特别注意的问题……我的 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】:

tableview 单元格的索引路径需要同时包含行和部分。尝试使用工厂方法(在NSIndexPath UIKit Additions 中定义)创建索引路径,如下所示:

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

【讨论】:

谢谢,真是令人沮丧。这就是我过分依赖代码提示告诉我的内容。它从来没有建议过那个。 >:-(

以上是关于UITableView selectRowAtIndexPath 的断言失败的主要内容,如果未能解决你的问题,请参考以下文章

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

UITableView

水平 UITableView 中的垂直 UITableView

如何与重叠显示的 UITableView 交互另一个 UITableView

在 UITableView 中的 UINib 中重新加载 UITableView

iOS小技能:1. 什么是UITableView? 2. UITableView如何展示数据