2009-08-12 83 views
7

我正在做一個iPhone應用程序。在這個應用程序中,我只想將數據庫用作我應用程序中值的查找表。數據庫唯一能做的就是根據程序的查詢爲我提供所需的值。它不會在數據庫中進行任何添加或刪除操作。我的問題是如何使用CoreData在應用程序上初始化默認數據。所以當程序啓動時它已經擁有了所有需要的值。如何使用CoreData應用程序中的默認數據初始化商店?

如果您對其他建議有什麼更好的做法或什麼是其他選擇,請告訴我。

謝謝。

回答

0

我會寫一個工具,用你想要的數據填充數據庫,在生成時生成數據庫並將其包含在資源文件夾中。如果你不打算寫信給它,你可以把它留在那裏直接訪問它,如果你曾經想寫它,你需要將它複製到允許寫入的地方(如文檔文件夾)。

+0

這是一個非常古老的答案。我不打算寫預填充的數據庫,我可以直接從資源中讀取它嗎? – Suragch 2015-08-17 07:58:14

12

我會創建一個簡單的Mac應用程序,從基於Core Data文檔的應用程序的模板開始。將現有的.xcdatamodel複製到項目中的默認模板(或者添加新的數據模型,並確保重命名引用默認模型的任何位置)。在Interface Builder中打開文檔窗口的XIB文件,然後從Interface Builder庫檢查器中將Core Data Entity項拖入其中。在出現的對話框中,選擇要顯示的實體並選擇要顯示的實體。

這將創建一個全功能的界面,用於添加,刪除或編輯該實體類型的屬性。所有東西都應該通過Cocoa Bindings連接起來,這樣你就不需要編寫一行代碼就可以工作。您可以通過這種方式爲模型中的每個實體類型添加接口。

這將讓您快速輸入和編輯Core Data文檔中的數據,然後您可以將其保存到磁盤並作爲資源添加到您的iPhone應用程序中。 SQLite數據庫結構在桌面和iPhone核心數據實現之間完全兼容,所以我發現這是測試你的iPhone核心數據代碼的一種快速而簡單的方法。

+0

@「BradLarson」看起來這個特性(「將Core Data Entity項拖到視圖中」)在XCode4中停止了。 – Ali 2011-07-02 15:09:40

+0

當您需要在未來版本上遷移數據庫時會發生什麼?你會基本上必須重建每個版本的模型的默認數據庫?我很好奇,如果從一些屬性列表首次運行數據庫可能會更好,我很樂意聽取您的建議。感謝Brad! – iwasrobbed 2013-03-18 19:56:24

+1

@iWasRobbed - 在這種情況下,您也會將捆綁的數據庫遷移到最新版本。你想避免浪費時間升級每個iOS安裝。我爲此構建的Mac客戶端已能夠將數據庫更新到最新的模式,以便在iOS應用程序版本的新版應用程序中進行部署。 – 2013-03-19 02:51:50

1

我絞盡腦汁試圖解決這個問題。我想到的只是不保存數據庫。這樣,每次打開應用程序時都會進行初始化。如果你保存它,它會繼續複製。

7

請參閱核心數據編程指南,或見下文(從PG複製):

「 如何初始化存儲與默認的數據

有兩個問題在這裏:創建數據,並確保數據導入一次。 有幾種方法來創建數據。

  • 您可以創建包含默認一個獨立的持久性存儲 數據並將商店作爲應用程序資源包含在內。當您想要 使用它時,您必須將整個商店複製到合適的 位置,或者將對象從默認商店複製到現有的 商店。對於小型數據集,您可以直接在代碼中創建管理對象 。

  • 您可以創建數據的屬性列表(或其他基於文件的 表示形式),並將其存儲爲應用程序資源。 當你想使用它時,你必須打開文件並解析 表示來創建管理對象。

你不應該在iOS上使用這種技術,並且只有在Mac OS X解析絕對必要的文件來創建存儲招致不必要的開銷。自己離線創建Core Data存儲並直接在應用程序中使用它會更好。 也有幾種方法,以確保默認值都是進口的只有一次:

  • 如果您使用的是iOS或創建 Mac OS X的一個非基於文檔的應用程序,你可以添加應用程序檢查啓動以確定 文件是否存在於您爲 應用商店指定的位置。如果沒有,則需要導入數據。對於基於iOS的 示例,請參閱CoreDataBooks。

  • 如果您正在使用NSPersistentDocument創建基於文檔的應用程序,那麼您將初始化 initWithType中的默認值:error :.

  • 如果有商店(因此文件)可能是 創建但數據未導入的可能性,那麼您可以將元數據標誌 添加到商店。您可以更有效地檢查元數據(使用 metadataForPersistentStoreWithURL:錯誤:),比執行提取操作的 更高效(並且它不要求您硬編碼任何 默認數據值)。

正如上面提到的,通常我們需要創建代碼預填充的默認存儲,然後用它作爲 資源文件,並從資源包複製到文件,如果該目錄請在Xcode Organizer(或Apple Developer Center)中搜索CoreDataBooks代碼示例,然後查看 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator方法。

相關問題