2011-04-16 53 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

相關問題