2014-01-21 53 views
0

我有一個應用程序,我正在編寫從幾個網絡來源提取數據: 1)博客文章列表(UITableViewController) 2)視頻列表(UIViewController with嵌入式的UIScrollView) 3)圖像(UIViewController中帶有嵌入式的UIScrollView)ios應用程序通過預先請求數據提高網絡性能

眼下的列表中,有一個主屏幕,菜單,當你按下一個按鈕,一個destinationViewController(如上所述)是什麼樣的負載數據需求。我注意到這很慢,尤其是在蜂窩數據連接而不是WiFi時。

我正在考慮創建一個請求所有數據的類,並在每次重新進入應用程序時啓動它。有沒有人有建議,可以幫助我回答以下問題?

1)是否有任何類,框架或現有的我可以用來在一個地方啓動這些請求的代碼? 2)我的目標視圖控制器(如上所述)如何獲取數據? 3)如果我們的目標視圖控制器恰好在數據可用之前被調用,它將如何獲知數據已準備就緒? 4)我應該採用更好的策略嗎?

我很感激幫助。

謝謝, 雅

+0

需要更多信息。什麼格式的數據,JSON,文本等?當應用程序啓動時,是否要將數據保存到設備並從保存的版本加載它?我不認爲所有事情都可以事先要求,在某些時候,用戶將不得不等待。 –

回答

0

關閉我的頭頂,我會讓你提到的請求類,並開始在applicationDidFinishLaunching的所有請求方法在AppDelegate中。我也可能會進行自定義NSObjects每種類型你會獲取物體和每個您的要求類的方法,所獲取的數據轉換成上述目標,那麼每個對象緩存到磁盤,因爲他們下載。然後在您的視圖控制器中,根據需要獲取緩存的對象。

當你cacheing,請確保您緩存,將100%是唯一的,因爲你會想你開始一個新的下載之前運行對當前本地緩存中檢查的一個關鍵的每個對象。我可能會將文件類型和文件名串起來,並將該字符串設置爲緩存對象的關鍵字。

要在您的請求類方法中運行當前緩存的檢查,說「如果當前緩存包含對象的關鍵字: uniqueKey ...什麼也不做,否則開始下載並在完成時緩存對象。「

也在你的視圖控制器中運行檢查,因爲你也想要處理視圖控制器請求緩存對象但尚未下載的情況。 「如果當前緩存有key:key的對象,太棒了!用它。如果其他人,開始下載...緩存它...然後給我打電話回來,所以我可以使用它,而我顯示加載消息給最終用戶。」

我敢肯定還有其他的方案,你將不得不去處理,但是這就是理論指導我的頭

編輯:

退房這一點,它可能會幫助你很多,我認爲它也採用自我緩存(如果你。不想寫你自己的緩存方法):https://github.com/Infusion-apps/Download-Manager

編輯2: 我也同意@RyanDignards poi nt#4。如果可能,避免提取不需要的數據。然而,只有您真的瞭解您的用戶界面/用戶體驗和應用程序功能,而且我的建議是假設您的最終用戶很有可能會僅使用您的應用程序來消費您提供的內容。因此,他們最有可能會被想閱讀博客文章,觀看視頻等等......電話是你的,如果你想有更多的機會的用戶會觀看所有的內容比不了,我會去預加載路線,因爲沒有什麼不喜歡用戶等待。

+0

至於獲取的所有數據前期VS上demmand,它是目前在demmand和我注意到它的顯著緩慢。也許你上面提到的下載管理器是使用緩存的好方法。但我擔心的是一些網址(如獲取圖片列表)始終是相同的網址。如果緩存是一個,不用它只是去緩存,永遠不會得到更新的圖像列表? 此外,應用程序的主要目的是消耗contnent,但如果他們正在進入應用讀取博客文章或觀看視頻或兩者我不能保證。我只是不想讓他們等待。 –

+0

你不想緩存從最初的服務調用的結果來獲得圖像的實際列表下載,你只需要你把它拿來(大男孩後,從該列表緩存單個文件:視頻文件,圖像文件等等)。如果服務調用設計正確,那麼獲取當前對象列表的初始調用實際上不應該返回對象本身,而只是一個指針或url,然後去下載對象。因此,「獲取圖像列表」的初始請求應該非常快。一旦你有這個列表,然後你循環通過&下載和緩存每個文件 –

+0

好吧,我想def prechech'列表'的內容,但因爲即使這需要一段時間下載。我想知道Download-Manager是否有辦法爲不同的項目設置不同的緩存過期。 –

0

1)RestKit被普遍認爲是標準的網絡交互的一個構架http://restkit.org

2)RestKit提供了一些方法,如-[getObjectsAtPath: parameters: success: failure:]或交,這將提供在成功的響應。此外,它可以通過映射將響應直接轉換爲相應的對象。

3)一般來說,我會發佈一個通知,這是獨一無二的這一要求,任何有興趣的控制器將獲得通知,與位於notification.object聽衆中的響應。此外,大多數網絡請求都提供了一個回調處理程序,您可以直接更新UI。

4)我建議不要搶先加載,因爲你正在使用的資源的東西,你可能沒有實際使用。我的建議是將呼叫細分爲最小可能的級別,然後在發佈通知時將該數據插入到用戶界面中。