2011-04-16 74 views
18

在某些情况下,UITableView didSelectRowAtIndexPath被调用两次导致错误Pushing the same view controller instance more than once is not supportedUITableView didSelectRowAtIndexPath调用两次

这里的是事件序列:

TableView::didSelectRowAtIndexPath. 
TableView::viewWillDisappear. 
PushedViewController::viewWillAppear. 
TableView::didSelectRowAtIndexPath. 
Error: Pushing the same view controller instance more than once is not supported' 

值得一提的唯一的事情是UITableView的加载图像异步,但永远不会调用didSelectRowAtIndexPath。此外,重复使用PushedViewController以避免每次在UITableView中选择一个单元格时重新加载它。

任何人有任何想法可能会导致此? 谢谢。

+0

发布一些相关的代码? – Jamie 2011-04-16 16:52:57

+0

请确保你的呼叫deselectrowatindx路径没有选择...... – Ravin 2011-04-16 17:04:56

+0

Raving,我没有打过电话。杰米,有什么相关的代码?有一个pushViewController,然后发生上述情况(并非所有的时间)。 – 2011-04-17 02:25:54

回答

1

在第一个“didSelectRow”后禁用用户交互。在转换过程中,可能会有多个水龙头“叠加”。

它通常需要一个在手指上具有惊人灵活性的人来获得这种行为,但仍然如此。

+0

[某人在手指上具有惊人的灵活性以获得此行为]。你是对的,但它正在发生。这是否意味着你之前见过?它可能是iOS中的错误吗? – 2011-04-17 02:28:10

+7

像一个该死的测试者那样具有惊人灵巧的人 – 2013-10-01 14:35:06

+0

Adam,是的,没错。 @ED。 :不管它是否是iOS中的错误,我都说不清楚。如果我没有弄错的话,最近在iOS 7中也可以看到这一点。 – 2013-10-02 13:18:27

32

我也看到这个问题,可能1000个用户中有一个受到影响,或者更少。我清楚地看到两个didSelectRowAtIndexPath一个接一个地注册了50毫秒。我的猜测是,这是iOS中的一个错误 - 一旦推送了新的视图控制器,就不应将新的点击指向旧的视图。唉,我们可能需要编写代码来防止这种情况发生。这是我在想什么:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { 
     if (self.navigationController.topViewController != self)   
      return; 

    ... do other stuff 

    } 
+4

此修复方法很简单,可以完成这项工作。顺便说一句:在我的应用程序,我能够随时重现这个问题,我想要的。 1.打开应用程序。 2.转到从互联网加载信息的表格视图控制器。 3.在装载时点击任何一个疯狂的行。 4。几个DidSelect被触发并且detailViewController被多次推送 – AmitP 2013-09-05 10:34:20

+1

我遇到了这个问题,特别是在didSelectRowAtIndexPath中手动执行segue时。我做了一些测试,以确保这不会阻止合法的细胞选择,而且你知道,它就像一个魅力! – averydev 2014-04-06 17:24:03

0

这是因为您在didSelectRowAtIndexPath方法中使用的segue。确保通过将ctrl从源视图控制器顶部的视图按钮拖到目标视图控制器来创建此segue。当您通过将ctrl从表视图单元格拖动到目标视图控制器来创建segue时,会发生该错误。 你不需要改变你的任何代码。只需删除segue并以正确的方式创建它。希望这能解决你的问题,如果我的问题正确。

1

如果你已经创建故事板塞格别打电话;

[self performSegueWithIdentifier:@"TYPE" sender:self];

在这种方法中;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

相关问题