18

特定の状況下で、UITableViewdidSelectRowAtIndexPathが 2 回呼び出され、エラーが発生しますPushing the same view controller instance more than once is not supported

イベントのシーケンスは次のとおりです。

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

注目に値する唯一のことは、UITableView が画像を非同期的にロードしているが、didSelectRowAtIndexPath. また、UITableView でセルが選択されるたびに再読み込みする必要がないように、PushedViewController が再利用されます。

誰がこれを引き起こしているのか考えていますか? ありがとう。

4

5 に答える 5

32

私もこの問題を目にしています。おそらく、影響を受けるユーザーは 1000 人に 1 人か、それ以下です。2 つの didSelectRowAtIndexPath が 50 ミリ秒ずつ登録されていることがはっきりとわかります。私の推測では、これは iOS のバグであると考えられます。新しいビュー コントローラーがプッシュされると、新しいタップが古いビューに向けられるべきではありません。残念ながら、これを防ぐコードを書くのは私たち次第です。これが私が考えていることです:

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

    ... do other stuff

    }
于 2011-06-01T05:57:41.193 に答える
1

最初の「didSelectRow」以降のユーザー操作を無効にします。遷移中に複数のタップが「スタック」する可能性があります。

通常、この動作を得るには、指に驚くほど器用な人が必要ですが、それでも.

于 2011-04-16T19:54:25.683 に答える
0

これは、didSelectRowAtIndexPathメソッド内で使用しているセグエが原因で発生します。このセグエが、ソース ビュー コントローラーの上部にあるビュー ボタンから目的のビュー コントローラーに Ctrl キーを押しながらドラッグして作成されていることを確認します。このエラーは、Ctrl キーを押しながらテーブル ビュー セルから目的のビュー コントローラーにドラッグしてセグエを作成すると発生します。コードを変更する必要はありません。セグエを削除して、正しい方法で作成してください。質問が正しければ、これで問題が解決することを願っています。

于 2015-05-27T14:37:32.040 に答える