2012-09-01 64 views
1

我有一個tableview中,我需要表現出約10,000行(數據sqlite的本地存儲)如何加載大量數據到UITableView的不阻塞UI

但是,當我們跳轉到該視圖,應用程序是被阻塞(凍結)作爲它加載所有這些行。

無論如何加載數據沒有凍結用戶界面?

PS。我們的應用程序被拒絕了,是因爲這個原因嗎?

感謝

編輯: 他們拒絕並給予下列信息 「你好

我們注意到您的應用程序沒有提供原生iOS功能

,詳情請參閱應用程序設計信息的視頻,:。 「開始 視頻:Great iPhone Apps的成分」和「iPhone用戶界面 設計」,可在iOS開發人員 中心http://developer.apple.com/devcenter/ios, 和iOS的人機接口 準則http://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/MobileHIG.pdf在 特別的章節,「大 iOS應用擁抱平臺和HI設計 原則」 http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html和 「人 接口原理」 http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Principles/Principles.html%23//apple_ref/doc/uid/TP40006556-CH5-SW1。」

+0

當一個應用程序被拒絕時,他們通常會**告訴你一個理由。 –

+0

爲什麼你不使用Load More Concept ...?首先只顯示25個數據。和當用戶在那個時候向下滾動加載另外25個數據........ – Wolverine

+0

@PhillipMills我在 以上添加了原因,但基本上他們沒有給出明確的理由 – cnu

回答

1

隨着一萬行,你別無選擇,只能按需加載你的數據。否則,你的應用沒有機會在體面的水平上表演。像你描述的凍結一定會足以看到你的應用程序被拒絕。

這種方法對於內存來說也是很浪費的,因爲在任何給定的時間,你最多需要兩萬行。

加快速度的一個合理簡單的方法是爲您的數據頁面(例如,每頁10個項目)準備一個NSCache,添加獲取記錄總數的代碼,並將檢索數據的代碼修改爲從單個頁面讀取記錄(使用LIMIT/OFFSET)。當你的表顯示行時,它應該嘗試從緩存中獲取行的頁面。如果頁面不在那裏,它應該從sqlite加載它並放入緩存。使用頁面可以減少往返數據庫的次數;使用緩存可以讓你管理最佳的內存使用。


這看起來並不像你的應用程序已被拒絕凍結,但一旦你修復了「缺乏本機iOS功能」,凍結將觸發另一個拒絕。

+0

但我們有搜索欄,所以如果我們只加載一些項目,並且用戶搜索數據庫中存在的東西,我們可能無法正確顯示? – cnu

+0

@cnu無論使用或不使用搜索欄,您都應該可以使用此方法。更改爲搜索欄應使緩存無效。您還需要獲取新的計數,並告訴表刷新。其他一切都會自動發生。 – dasblinkenlight

0

檢查this演示用於延遲加載所有數據以及圖像。

此示例演示了加載和顯示UITableView的多階段方法。它首先從RSS源中加載相關文本,以便儘可能快地加載表格,然後以異步方式爲每行下載圖像,以便UI更具響應性。

+0

,但這是網絡數據,因爲我們有本地數據 – cnu

+0

它沒有必要,我們應該懶惰加載網絡數據只有延遲加載意味着來自本地的大量數據也 –