2011-12-19 54 views
7

我已經閱讀了幾篇關於UITableView的文章,其中包括official doc以及一些關於SO的文章。但是我的情況似乎有所不同。
我想在每次加載視圖時更新表格。我必須使用HTTP請求獲取數據。
我現在得到的是:如何在運行時更新UITableView,加載視圖後

  1. 當進入表視圖,我應該使用非同步的HTTP請求來更新數據。因爲我不想讓主線等待。在tableView:cellForRowAtIndexPath:方法中可以做到這一點。所以我在開始時返回0,因爲沒有數據存在。
  2. 當我得到HTTP響應,我更新主線程上的行使用beginUpdates endUpdates insertRowsAtIndexPaths:withRowAnimation:
  3. 而且我必須在同一時間更新「數據源」,但如何做到這一點?
    或者我應該每隔一段時間創建一個守護進程線程並更新我的數據?以便在加載TableView時數據將準備就緒。
+0

爲了記錄,您可以引用不同步的請求,如[asynchronous](http://dictionary.reference.com/browse/asynchronous)。這不應該聽起來光顧。問候,托馬斯。 – 2011-12-19 14:38:40

回答

13

響應你會做這樣的:

  • 需要布爾或某些變量,您可以可靠地檢測你是否擁有所有的數據。
  • viewWillAppear中,重置所有內容。開始加載你的數據。
  • 如果你還沒有數據,你只能顯示一個單元格的一個部分(佔位符單元格,讀取「Loading ...」並顯示一個微調器,例如)。
  • 一旦數據被完全加載,你設置布爾或其他。
  • 呼叫[self.tableView reloadData];

在所有的UITableViewDataSource方法,你將需要檢查您是否已經得到了數據已經或沒有。如果不是,則返回佔位符數據。

+0

我試過你說的,太棒了!謝謝! – Nickolas 2011-12-19 14:38:59

1

[yourtablename reloadData];將幫助您relaod在tableview中的數據,您可以致電此,一旦你從你的服務器

1

我不確定這裏有什麼「最佳方法」。我會建議嘗試一下你的方法,看看它是否提供了足夠的用戶體驗(不管對你來說意味着什麼),如果沒有,嘗試其他方法。我肯定會建議有一些「加載」指標,而表是空的,等待http響應。

就您對「數據源」的問題而言,UITableView的數據源只是一個實現UITableViewDataSource協議的對象,您可以閱讀有關here的信息。通常情況下,您將使XCode設置一個UITableViewController對象,該對象將充當您的表視圖的委託和數據源。實際存儲數據的方式取決於您。數據源協議只是簡單地提供了表格視圖將「請求」它需要加載的數據的方法。

+0

感謝您的鏈接。 – Nickolas 2011-12-19 14:39:28

相關問題