2014-02-14 31 views
0

我正在處理與數據庫有連接的應用程序。數據庫包含300MB到4GB的數據,因爲每個客戶都有自己的數據庫。我遇到的問題是收集數據,由於潛在的數據庫大小,只能在本地下載和存儲信息是不可能的。數據可能會變得相當複雜並且可能會有所不同舉一個例子:處理iOS上不穩定數據的最佳方法

一位顧客都有一個任務,他們要搜索的從應用程序,工作。 然後我獲取匹配搜索條件的作業列表。 客戶看到他們想要查看的工作,並開始收集流程。

這項工作有可能觸動很多表,有時反覆..

還有就是工作表,關係表映射到一個人。然後還有另一張包含非客戶關係信息的表格,然後會有與該作業關聯的日曆事件,這些事件可以關聯不同的人。然後有電子郵件附加到工作,這反過來可以帶來更多的人和事件。

所以我有收集所有這些信息的工作模式。我遇到的問題是,我無法找到一個很好的方法來告訴我的觀點,即數據完全被下載。我最初的想法是使用NotificationCenter在任務的某些部分完成時發出消息,允許核心Job對象在一切完成時通知視圖。

我知道這是一個相當普遍的問題,但我誠實地難倒就如何採取一個未知的數字表結果,並翻譯成我的應用程序可以實際使用的通知。

+0

這是一個棘手的問題,沒有簡單的答案。無論如何,你必須跟蹤你所要求的一切,但還沒有收到。我有一個具有類似複雜性的應用程序,但框架肯定與您的完全不同,所以我不能提供更多的一般建議。 –

+0

我建議在紙上畫出一切。所有的視圖控制器,它們的數據,如何從屏幕A到屏幕B等等。一旦你在紙上準確地顯示了圖表,你就可以一次一步地開始編程。 – sangony

回答

1

我最初的建議是Core Data。它專爲這類問題而設計。不,我不是說要將整個數據庫下載到Core Data中。我在說要使用Core Data來管理你的對象模型,因爲這就是它擅長的。

當你從服務器接收數據,撰寫成NSManagedObjects和數據存儲他們堅持。在UI方面,創建一個NSFetchedResultsController,以便隨時通知您異步的數據更新。你不一定需要堅持這個商店。你可以將它保存在內存中,並在查詢完成後丟棄它,但將它保存在磁盤上可能是一個很好的緩存解決方案。同樣,不要將核心數據視爲「本地數據庫」。可以將其視爲可以查詢對象的模型持久性引擎。這種模式的

一個優點是可以提供最好的數據提供給用戶,因爲它變得可用。但是,如果你沒有獲得這些信息,直到它全部可用爲止。這也很好。只需讓網絡端不斷更新其上下文,然後只在所有內容完整時進行保存。這樣NSFetchedResultsController獲得單個原子更新。核心數據的好處在於它內置了這些概念,因此您無需大規模重新設計就可以調整更新策略。

+0

我會說,而不是對所有東西都使用核心數據,可以考慮在Caches目錄中放置一些大文件,如果iOS需要的話可以刪除它們。當然,這意味着應用程序必須準備好找到丟失的文件並重新獲取它,但它會使應用成爲「好公民」(並且可能會更容易清除Apple的接受標準)。 –

0

通知中心將爲此工作得很好。

發表在你的數據加載邏輯點的通知,觸發用戶的UI更新。