UITableView didSelectRowAtIndexPath调用了两次

| 在某些情况下,两次调用UITableView“ 0”会导致错误“ 1”。 这是事件的顺序:
TableView::didSelectRowAtIndexPath.  
TableView::viewWillDisappear.  
PushedViewController::viewWillAppear.  
TableView::didSelectRowAtIndexPath.  
Error: Pushing the same view controller instance more than once is not supported\'  
唯一值得注意的是,UITableView正在异步加载图像,但是从不调用“ 0”。而且,PushedViewController被重用以避免每次在UITableView中选择一个单元格时都必须重新加载它。 任何人都不知道可能是什么原因造成的吗? 谢谢。     
已邀请:
我也看到了这个问题,大概每千个用户中就有一个受到影响,甚至更少。我清楚地看到两个didSelectRowAtIndexPath一个接一个地注册了50 ms。我的猜测是这是iOS中的错误-推送新的视图控制器后,不应将任何新的点击直接定向到旧视图。 las,我们可能要编写防止这种情况的代码。这就是我的想法:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
        if (self.navigationController.topViewController != self)        
            return;

    ... do other stuff

    }
    
在第一个\“ didSelectRow \”之后禁用用户交互。在转换过程中,有可能多次轻按以“堆叠”。 通常,需要手指灵巧的人才能获得这种行为,但仍然如此。     
如果您已经创建了Storyboard Segue,请不要调用;
[self performSegueWithIdentifier:@\"TYPE\" sender:self];
用这种方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    
发生这种情况是由于您在
didSelectRowAtIndexPath
方法中使用了segue。确保通过ctrl从源视图控制器顶部的视图按钮拖动到目标视图控制器来创建此序列。当您通过ctrl从表视图单元格拖动到目标视图控制器来创建segue时,会发生错误。 您不需要更改任何代码。只需删除序列并以正确的方式创建它即可。希望这能解决您的问题,如果我没问题的话。     

要回复问题请先登录注册