我在我的應用程序中使用了一個搜索欄,並在下面顯示了一些來自ext API的結果。 內容首先被存儲在一個數組「xyz」中,並且每次用戶在搜索欄中輸入時,我都會刪除所有對象並重新加載表格。removeAllObjects如果動作很快就不會移除
如果用戶輸入緩慢,即[xyz removeAllObjects]工作正常,結果是正確的...但是,如果用戶輸入速度非常快,[xyz removeAllObjects]似乎沒有任何效果,並且重複項會附加到數組..
我不知道如何解決這個問題。請幫幫我。謝謝。
我在我的應用程序中使用了一個搜索欄,並在下面顯示了一些來自ext API的結果。 內容首先被存儲在一個數組「xyz」中,並且每次用戶在搜索欄中輸入時,我都會刪除所有對象並重新加載表格。removeAllObjects如果動作很快就不會移除
如果用戶輸入緩慢,即[xyz removeAllObjects]工作正常,結果是正確的...但是,如果用戶輸入速度非常快,[xyz removeAllObjects]似乎沒有任何效果,並且重複項會附加到數組..
我不知道如何解決這個問題。請幫幫我。謝謝。
是一個完全串行操作;該方法不會返回,直到數組爲空。
因此,必須存在一個線程,並且您很可能從多個線程訪問可變數組。可變數組不是線程安全的。修復排他性問題並解決問題。
最簡單的方法是將顯示的數組與正在計算的數組分開。只要計算完成,將計算的數組移動到顯示數組,並且不要再次改變它。
爲什麼不創建一個新的NSArray,指出結果,然後釋放舊的數組。這樣重複是不可能的。就像:
NSArray *newArray = [someObject newSearchResults];
NSArray *oldArray = xyz;
xyz = [newArray retain];
[oldArray release];
噢是的..取代線程代碼與正常[自我方法:];解決了這個問題...但是,只有1個問題;搜索欄被阻止,即用戶現在不能快速輸入,並且每次輸入一個字母時都要等待......所以有什麼方法可以同時使兩個工作都能正常工作嗎? – testndtv 2011-03-14 16:44:08
我也試過用2個獨立的數組..但是也沒有工作..我試圖找到一個解決方案,只保留1個數組,以避免任何複雜性... – testndtv 2011-03-14 17:19:29
爲什麼沒有兩個數組工作?在這種情況下,這是普遍接受的解決方案。 – bbum 2011-03-14 20:43:55