5

我的应用程序在 tableView 中选择某些内容时出现崩溃问题。这不是 100% 可重现的,但它相对经常发生。

在我的 EventListViewController 类(UITableViewController 的子类)中发生了什么,我覆盖了 didSelectRowAtIndexPath 函数,因为我也在这个类中使用了搜索栏,我希望它只在你不搜索时选择。

代码如下所示:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(!searching)
        [super tableView:tableView didSelectRowAtIndexPath:indexPath];
}

但是,当它崩溃时,我会因异常而中断,这是我在调用超级函数的行上收到的消息:

[EventListViewController tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0xa648e50

我在调试器上打印了一些东西,对我来说一切都很好:

(lldb) po 0xa648e50
(int) $1 = 174362192 <EventListViewController: 0xa648e50>

(lldb) po self
(EventListViewController *) $2 = 0x0a648e50 <EventListViewController: 0xa648e50>

(lldb) po tableView
(UITableView *) $3 = 0x070fd400 <UITableView: 0x70fd400; frame = (0 0; 320 367); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x6e46750>; contentOffset: {-0, -0}>

(lldb) po indexPath
(NSIndexPath *) $4 = 0x06e8caf0 <NSIndexPath 0x6e8caf0> 2 indexes [1, 1]

(tableView 有 2 个部分,第二部分有 2 个条目)

有人知道发生了什么吗?如果您需要更多信息,请告诉我。

注意:经过更多调查,我发现这是 100 % 可通过以下步骤重现的: 1:加载应用程序,然后单击两个条目中的任何一个。2:返回 tableView 控制器 3:点击两个条目下方,在不应该有单元格的空白处应用程序将崩溃,但请注意 indexPath 并没有说它试图选择一个单元格超出了tableView的范围,只是tableView的didSelectRowAtIndexPath方法不存在

4

1 回答 1

22

调用superintableView:didSelectRowAtIndexPath:是不必要的。如果我没记错的话,UITableViewController不提供该方法的默认实现。因此,您对 super 的调用会导致崩溃。

于 2012-08-05T22:42:35.423 回答