2012-06-20 48 views
0

我在重新加載UITableView非常複雜的問題!UITableView重新加載問題

我有一個UITableView,其中我持續(接近10秒),從服務器檢索數據並顯示我的UITableView中包含自定義單元格的數據。問題是,當用戶(即我)滾動通過UITableView時,它會因爲indexOutOfBound錯誤而崩潰,因爲我從服務器獲取數據,NSMutableArray將清除並重新填充數據。

我也嘗試了BOOL變量設置YESNOscrolling delegates。在這種情況下,如果我滾動UITableView它將刪除滾動方向的單元格,10秒後它將顯示所有單元格的數據。

但我想要的是,如果用戶滾動UITableView沒有創建的單元格應該隱藏! scrollEnabled不是一個解決方案。

請幫我一把!

謝謝:)

+0

我懷疑發生了什麼事情是您在更新表格視圖的同時滾動出界。你需要在滾動的時候鎖定表視圖的更新(所以你不能超出界限),或者你只需​​要在上次更新的時候允許滾動到表格中的最大條目數滾動完成之前的任何單元格或條目)。無論哪種方式,這種更新非常棘手,這聽起來像是一個有趣的問題,你需要解決。 –

+0

確保只有在所有數據準備就緒後,行數和行數纔會更改。 – Tom

回答

2

這是一個線程不安全的代碼問題。數據源在被主動使用時被修改。

一個安全的解決方案是將所有數據解析到某個數據庫(sqlite/Coredata)並從數據庫重新加載表數據源併爲表調用reloadData。這種方式在你使用數據源數組的時候 - 它不會是空的。

好運

+1

我前幾天遇到了這個問題,是的,最好的辦法是在從服務器檢索時不更新實際的數據源。製作單獨的數據源,將服務器值存儲在其中,然後將單獨的數據源分配給表的數據源。操作應儘可能接近原子。 – Tanaki

+0

您提供的解決方案出現在我的腦海中!但是如果我不會連續讀取數據,這可能是明智的!:) – Hemang

0

如果indexOutOfBound意味着你必須在你指定的檢查numberofrow的是比小區forrowatindex的我們的陣列接收更多。所以檢查一下。