2011-08-14 74 views
10

我的應用程序涉及通過互聯網獲取大型json文件,然後將其解析爲Core Data。預填充版本的核心數據?

這很好,但我怎樣才能將已經充滿的Core Data數據庫版本加載到我的應用程序中,所以當它們第一次啓動時它就在那裏。用戶可以決定稍後刷新它。

回答

2

核心數據數據庫只是一個SQLite數據庫文件。您可以將其交付到主包中,然後將其複製到文檔文件夾,然後將其與永久性商店協調人關聯。

9

有一個合理的教程關於預加載在Ray Wenderlich's site

通常 - 創建一個單獨的項目,將JSON文件解析爲核心數據數據庫。創建你的真實項目,將對象模型和數據庫文件複製到這個新項目中。

現在,在應用程序啓動時,檢查數據庫是否存在於文檔的目錄中,如果不存在,請從您的應用程序包複製預先填好的數據庫。

確保持久存儲協調器與文檔文件夾中的數據庫一起使用,而不是應用程序包中的數據庫。

更新2012年6月

我有GitHub上的一個小例子項目,稱爲該演示如何使用Xcode的工作區使用iPad的項目和OS X項目預加載的核心數據的數據PromNight。這使用了兩個應用程序之間共享的對象模型,這有助於在預加載時保持更改同步。

+1

+1爲Ray Wenderlich。 – Moshe

4

核心數據使用後備存儲,它本質上是一個sqlite數據庫(或者,在Mac OS上,可選地是一個XML文件)。您應該簡單地將該文件添加到您的應用程序捆綁包中,然後將其發佈到應用程序中至於獲取數據到數據庫中,這裏就是我會做:

  1. 編寫一些代碼來從任何格式你擁有了它在
  2. 運行代碼導入數據。
  3. 將sqlite文件從設備或模擬器中拷貝出來。
  4. 將新創建的sqlite文件添加到Xcode中的項目中。

我不會手工創建sqlite文件,因爲Core Data在後臺執行一些「巫術」操作,並且可能會破壞sqlite。另外,我見過開發人員使用多個目標。爲進口。這樣,他們可以在有條件的編譯器中編寫代碼,而不必擔心項目維護問題。例如:

#ifdef kImportTarget 

//run core data import 

#else 

// run the Core Data stack setup from an existing file 

#endif 
+0

在iOS上,我不認爲您可以選擇XML支持存儲。儘管這是Mac OS的一個選項。 – Abizern

+0

@Abizern - 你確定嗎?也許你可以從文檔中找到引用? – Moshe

+0

是的,我確定http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html正如它所說的 - 該XML存儲在iOS中不可用。 – Abizern