Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c tableview-无法识别的选择器didSelectRowAtIndexPath_Objective C_Ios_Xcode_Uitableview - Fatal编程技术网

Objective c tableview-无法识别的选择器didSelectRowAtIndexPath

Objective c tableview-无法识别的选择器didSelectRowAtIndexPath,objective-c,ios,xcode,uitableview,Objective C,Ios,Xcode,Uitableview,在tableView中选择某些内容时,我的应用程序出现崩溃问题。这不是100%可重复的,但它相对经常发生 在我的EventListViewController类(UITableViewController的子类)中,我覆盖了DidSelectRowatineXpath函数,因为我在这个类中也使用了搜索栏,我希望它只在您不搜索时进行选择 代码如下所示: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSInde

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

在我的EventListViewController类(UITableViewController的子类)中,我覆盖了DidSelectRowatineXpath函数,因为我在这个类中也使用了搜索栏,我希望它只在您不搜索时进行选择

代码如下所示:

-(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]
(lldb)采购订单0xa648e50
(整数)$1=174362192
(lldb)po self
(EventListViewController*)$2=0x0a648e50
(lldb)po表格视图
(UITableView*)$3=0x070fd400
(lldb)采购订单
(NSIndexPath*)$4=0x06e8caf0 2索引[1,1]
(tableView有2个部分,第二个部分有2个条目)

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

注:经过进一步调查后,我发现通过以下步骤,这是100%可重复的: 1:加载应用程序,然后单击两个条目之一。 2:返回到tableView控制器 3:点击两个条目下方的空白处,不应有单元格
应用程序将崩溃,但请注意,indexPath并没有说它正在尝试选择tableView界限之外的单元格,只是tableView DidSelectRowatineXpath方法不存在。

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

因此,谨慎的做法可能是将其包装在
if([super respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]{…}
,以防代码被移动到某个确实继承自实现者的地方。哇,这比我想象的要简单得多。谢谢你的帮助@不幸的是,这不起作用。[超级响应选择器:@selector(tableView:DidSelectRowatineXpath:)]返回true。可能是因为super实现了协议,但不是可选方法。我猜
didSelect…
UITableViewDelegate
协议的
@可选方法,那么?这很有趣,因为在Swift中,当您子类化时,存根仍然标记为
override
。。。