2010-01-06 43 views
1

我有一個包含三個組件的選取器。如果我同時旋轉一個組件,UIPicker會崩潰應用程序

前兩個組件依賴於最後一個組件。

所以它可能是:

  1. | 5 | M(線代表不同的列) 或 1「| 5」| FT

如果我正在移動第二列或第一列,並在他們停止旋轉之前將第三列從FT移動到M或反之亦然,然後在移動時它會使應用程序崩潰。

我知道這是因爲在pickerView:didSelectRow:inComponent: UIPicker的委託方法我正在執行基於第三列,即M或FT的最終值的計算。

SO,簡而言之

它是在第三列的第一列之前執行pickerView:didSelectRow:inComponent:即使用戶觸摸它們以相反的順序。

有什麼辦法可以解決這個問題嗎?

可能是這樣,如果一個組件仍在旋轉,用戶無法移動另一個組件?

任何幫助,高度讚賞

感謝

湯姆

回答

3

我認爲,而組件旋轉它沒有選擇的值,使之永遠不會調用pickerView:didSelectRow:inComponent:一旦它停止旋轉它併發送消息給代表。第一個停止旋轉的組件首先發送,而不是第一個觸摸的組件。這就是爲什麼你的第三列在前兩個之前調用該方法,儘管它最後被觸摸了。

我懷疑是因爲嘗試使用移動組件的nil選定行值執行操作而導致崩潰。如果是這樣,您可以通過在執行操作之前測試每個組件的選定值不是零來避免崩潰。如果組件仍在旋轉,那麼您應該跳過操作直到停止。我不認爲有可能凍結組件。

+0

這似乎是這種情況...因此是否可以在設置的時間間隔中途暫停,然後繼續操作? – 2010-01-07 11:20:26

+0

如果我明白你在做什麼,最簡單的事情就是測試所有的列是否有選定的值,如果他們這樣做,只進行計算。由於所有3列調用相同的didSelectRow:方法,每個列都可以觸發計算,因爲它是最後一個停止移動的組件。你只需要在代碼中進行足夠的條件檢查。 – TechZen 2010-01-07 13:25:08

+0

這是關鍵......使用斷點後,我意識到我沒有足夠的條件處理......感謝您的幫助:) – 2010-01-09 19:20:28

2

您可以通過將清晰的UIView放在上面來「凍結」您的組件。只要一個組件開始旋轉,您就可以顯示清晰的視圖以阻止用戶與其他組件交互。

這應該會阻止此問題的發生。

相關問題