2015-05-14 54 views
3

我試圖找到用某些預加載數據發佈應用程序的最佳方式。 我有一個有2個表的應用程序。我想用這些數據填充這些表格。問題是數據不僅僅是文本信息。 1實體包含大約40個屬性(數字,字符串,可轉換數據),因此將其嵌入到代碼中並非解決方案。如何使用預加載的coreData發佈應用程序?

感謝您的幫助。

回答

0

當用戶第一次嘗試訪問數據時,通過執行獲取請求或獲取持久性存儲中對象的計數來運行檢查以查看持久存儲中是否有任何對象。

如果提取請求的結果爲零,或者提取請求的對象計數爲0,則手動將數據從某個文件(JSON,plist,XML)加載到Core Data中。

+1

這是一個非常糟糕的主意。您正在讓用戶支付預先填充該數據庫的費用。 –

+0

@ MarcusS.Zarra我認爲你誇大了這種方法的不好之處。我也更喜歡CLI方法,但對於有少量數據的應用程序來說,這並不是什麼壞事。 – alastair

+0

以少量數據開頭的應用程序成爲具有大量數據的應用程序真的很快:) –

1

我是這樣處理的:

我使用默認的設置,其中後備存儲的核心數據是一個SQL文件。

我設置了我的應用程序,以便在應用程序的文檔目錄中設置SQL文件的持久存儲協調器。

我在模擬器上構建預填充的Core Data數據庫。

然後,我轉到應用程序的sim文件目錄,並將sql文件複製到應用程序的包中。

在應用程序委託的應用程序didFinishLaunching方法開始時,我檢查Core數據庫的sql文件是否存在於文檔目錄中。如果沒有,我將它從軟件包複製到文檔目錄中。

然後我調用創建持久存儲協調器的代碼,該協調器需要文檔目錄中的sql文件。在首次啓動時,這是從軟件包複製的初始文件。在後續啓動時,它是文檔目錄中包含當前數據的工作文件。

+0

編寫一個小CLI並將其作爲構建過程的一部分包含在手動進入模擬器並獲取SQLite文件中要好得多。介紹人員組件會引入錯誤。 –

+0

我已經這樣做了。但我想找到另一種方式來做到這一點,因爲我正在平移進行更新,而且我不想再次重寫數據庫。用戶可以寫入數據,如果我這樣做,所有輸入的數據都將丟失。 –

+0

@ MarcusS.Zarra Meh。 「人員部分」是開發人員執行的一次完成步驟。如果你犯了一個錯誤,應用程序無法運行,你必須去修復它。開發過程中的無數步驟都是如此。 –

4
  1. 編寫一個非常小的CLI OS X應用程序,支持您現有的核心數據堆棧。
  2. 此CLI在已知位置創建預填充的SQLite文件。
  3. 運行此CLI作爲構建過程的一部分
  4. 包括創建SQLite的文件作爲你的應用程序包的一部分
  5. 在發射時,如果目的地的SQLite文件不存在(NSFileManager會告訴你這一點);從應用程序包複製SQLite文件。
  6. 正常啓動。

這使得程序可以腳本化和一致。它重用您現有的代碼結構來構建預填充數據庫,並讓您保持最新狀態。

+0

當然,這隻適用於填充初始數據。如果您需要將新數據與可能已由用戶更改的數據合併,則需要做一些稍微不同的事情。 – alastair

+1

如果用戶將能夠編輯數據,那麼我會保留應用程序包中的「僅準備好」數據,並在可寫入區域創建一個新的存儲區。然後只讀可以隨意更新。 –