2015-11-27 47 views
0

我想在UITableView中顯示來自數據庫的數百條記錄。雖然我可以使用CoreData,但我決定嘗試使用SQLite數據庫,因爲我正在參加關於數據庫的演講。雖然我可能可以將所有數據加載到數組中,但我希望最大限度地減少內存使用量,以便我可以對具有更多數據的另一個應用程序使用相同的代碼。所以我的問題是,我如何加載數據庫中當前顯示在表視圖中的行?我想要顯示的表有幾個屬性,主鍵是一個字符串 - 表應該按這個字符串排序。那麼,如何找出顯示哪些單元格(索引),然後使用select * from mytable limit x,y來獲取我想要顯示的行,或者我可以通過任何方式(使用SQLite或使用一些優秀的代碼)來提高性能。從SQLite數據庫加載UITableView中的可見單元格

感謝您的幫助提前!

順便說一句:我使用FMDB,如果這沒有任何區別。

回答

1

你試圖做的是,在某種程度上,是荒謬的。它是Core Data的一部分,爲您完成所有優化,準確地用於在表視圖中顯示100行1000行。

但是,因爲它似乎你正在做這個作爲一個學術活動,這裏有一些提示:

  • 顯然,在SQL語句限制工作是正確的做法。
  • 您可以將陣列中您想要的記錄數量修改爲固定的數字,例如, 50.這將取決於屏幕上適合的最大單元數,大約5次左右(用於真正的快速滾動)。
  • 您仍然可以在numberOfRowsInSection中查看錶格視圖的總記錄數。它只會請求它需要顯示的記錄。
  • 在所有記錄的理論數組中的行記錄索引將由indexPath.row表示。
  • 您跟蹤當前偏移量,表示表視圖中首行總列表中的索引。
  • 您可以編寫一個函數來獲取某個索引的記錄,並檢查是否需要重新獲取。
  • 如果您需要檢查屏幕上的內容,您可以使用indexPathsForVisibleRows來獲取您的表格視圖中的所有可見單元格。
  • 要使滾動平滑,您需要覆蓋scrollViewDidScroll並進行適當的計算contentOffset,並設置表的contentOffset以便反映正確的表格部分。
+0

非常感謝您的詳細解答,這當然會幫助我。我還剩下一個問題:如何做到這一點?計算一個我想計算'絕對值'的前面所有部分的行數似乎相當遲鈍。 – borchero

+0

如果你想要部分,一定要用'NSFetchedResultsController'。 – Mundi

+0

好吧,至少這是一個誠實的答案,我一定會在我的應用程序的未來版本中這樣做,所以謝謝@Mundi :) – borchero

相關問題