我的應用程序涉及通過互聯網獲取大型json文件,然後將其解析爲Core Data。預填充版本的核心數據?
這很好,但我怎樣才能將已經充滿的Core Data數據庫版本加載到我的應用程序中,所以當它們第一次啓動時它就在那裏。用戶可以決定稍後刷新它。
我的應用程序涉及通過互聯網獲取大型json文件,然後將其解析爲Core Data。預填充版本的核心數據?
這很好,但我怎樣才能將已經充滿的Core Data數據庫版本加載到我的應用程序中,所以當它們第一次啓動時它就在那裏。用戶可以決定稍後刷新它。
核心數據數據庫只是一個SQLite數據庫文件。您可以將其交付到主包中,然後將其複製到文檔文件夾,然後將其與永久性商店協調人關聯。
有一個合理的教程關於預加載在Ray Wenderlich's site。
通常 - 創建一個單獨的項目,將JSON文件解析爲核心數據數據庫。創建你的真實項目,將對象模型和數據庫文件複製到這個新項目中。
現在,在應用程序啓動時,檢查數據庫是否存在於文檔的目錄中,如果不存在,請從您的應用程序包複製預先填好的數據庫。
確保持久存儲協調器與文檔文件夾中的數據庫一起使用,而不是應用程序包中的數據庫。
更新2012年6月
我有GitHub上的一個小例子項目,稱爲該演示如何使用Xcode的工作區使用iPad的項目和OS X項目預加載的核心數據的數據PromNight。這使用了兩個應用程序之間共享的對象模型,這有助於在預加載時保持更改同步。
核心數據使用後備存儲,它本質上是一個sqlite數據庫(或者,在Mac OS上,可選地是一個XML文件)。您應該簡單地將該文件添加到您的應用程序捆綁包中,然後將其發佈到應用程序中至於獲取數據到數據庫中,這裏就是我會做:
我不會手工創建sqlite文件,因爲Core Data在後臺執行一些「巫術」操作,並且可能會破壞sqlite。另外,我見過開發人員使用多個目標。爲進口。這樣,他們可以在有條件的編譯器中編寫代碼,而不必擔心項目維護問題。例如:
#ifdef kImportTarget
//run core data import
#else
// run the Core Data stack setup from an existing file
#endif
+1爲Ray Wenderlich。 – Moshe