2017-09-02 34 views
2

我正在構建一個應用程序,從WordPress博客網站獲取帖子並顯示在tableView上。每個表格視圖單元格都顯示帖子圖片,標題和摘錄文本。這是一門課程項目,需要使用核心數據。所以我的問題是,爲了更好的用戶體驗,我應該在下載後直接在單元格上顯示圖像,然後保存到商店,或者我應該保存到商店,獲取並顯示?下載,保存到核心數據,獲取和顯示?或者下載,顯示然後保存?

一些注意事項:

  • 時,應用程序啓動,它會檢查網絡連接

    ,如果連接建立,商店將被清理和最新的職位將被下載。

  • 它會下載5個帖子在時間

  • 向上滾動將執行舊文章的下載。
+0

我喜歡先放映,然後保存。保存不是廉價的操作,應該在後臺隊列中執行,所以我們不能等到它完成。 – Akki

+0

感謝您的意見Akki –

回答

1

這是一個面向觀點問題。我能做的最好的事情就是讓你知道我過去如何設計我的應用程序來處理這種情況。

我的解決辦法:

  1. 使用NSFetchedResultsController來讀取核心數據的數據,並使用NSFetchedResultsController的fetchedObjects陣列作爲數據源到您的UITableViewControllerUICollectionViewController

  2. 實施的NSFetchedResultsController代表這將Core數據中的數據更改時觸發。這樣你可以有效地更新你的CollectionViewTableView並在UI ASAP上顯示數據變化。

  3. 使用背景上下文來修改數據的方式你的主線程將是免費的應用保持響應。

  4. 爲了創建背景情況下,我更喜歡父子背景架構,而不是傳統的多語境架構。親子上下文架構很容易理解,保持代碼清潔。

  5. 切勿將圖像保存到核心數據中。而是將下載的圖像保存到文檔目錄,並將相關鏈接保存到CoreData中的下載文件中。

  6. 還記得我說過要刪除的文件不是絕對的文件相對路徑。因爲您的應用程序文件夾/沙箱路徑在殺死和重新啓動應用程序時發生變化。在覈心數據中保存文件的絕對路徑是徹底解決邏輯問題的好辦法。

  7. 不要擔心在數據保存到核心數據的延遲。延遲可能只有幾秒鐘,你甚至不會注意到。將數據保存在一個數組中,然後從核心數據中獲取數據並更新數組是一個完整的no。

  8. 就個人而言,使用陣列來保存數據,而不是NSFetchedResultsController的fetchedObjects是一個完整的NO。爲什麼?簡單來說,數組不是線程安全的,因爲您將後臺線程作爲Web服務調用和解析數據,您可能有多個線程同時訪問數組。由於Array不是線程安全的,因此您可能很容易進入數據不一致狀態,並且可能導致崩潰。

  9. 最後使用像SDWebImage這樣的庫來有效地加載圖像。 SDWebImage不僅可以加載圖像,還可以通過快速,快速地加載圖像,在各種級別(RAM和HardDisk中)緩存圖像。

  10. 如果你打算使用分頁來獲取數據,使用scrollViewDidScroll滾動視圖的委託,當用戶滾動找出表/的CollectionView的底部,使Web服務調用,並獲取在後臺線程更新的核心數據。只要更新mainObjectContext,NSFetchedResults控制器的委託將被觸發,並且您應該能夠立即更新UI。

+1

感謝您的輸入Sandeep。所以基本上你說的是先保存並且不用擔心保存/獲取時間,只要我使用fetchResultsController來管理tableView數據源,它聽起來會更好一些。我喜歡使用scrollViewDidScroll預取數據的想法。 –

+0

@ steven-taglohner:的確如此。這是大多數具有脫機支持的應用程序的工作原理。每次你的應用程序啓動你的視圖控制器只是從核心數據讀取數據對於你的VC數據源總是NSFetchedResultsController。因此,每當用戶調用您的應用程序時,您都會始終顯示數據。意思是你可以在後臺撥打電話來獲取更新的數據,解析和更新核心數據。只要Coredata得到更新,您將會收到代表的通知,並且能夠更新UI並顯示新數據,而不用麻煩。我看過的大多數應用程序都使用這種方法 –

相關問題