2011-08-29 34 views
1

我創建了一個項目,其核心數據將與不可更改的數據庫配合使用。我不想在這個項目中編寫代碼,它將以編程方式填充這個數據庫。因此,我使用核心數據創建第二個項目,從第一個項目添加現有的xcdatamodel而不復制(僅引用)。在那裏我填充我的數據庫,用mozilla插件打開它併成功填充。然後我複製我的* .sqlite文件並手動將其替換爲第一個項目中的舊文件。它會導致錯誤:「用於打開商店的模型與用於創建商店的模型不兼容」。但我使用兩個文件相同的xcdatamodelid。我的錯誤在哪裏?在兩個應用程序中使用一個xcdatamodelId

對不起,我真的需要幫助。

P.S.當我從FileMerge的第一個項目和第二個(與填充基地的評論代碼)打開sqlite文件 - 第二個已經是空的。我很感激任何建議或幫助。

回答

1

Karoly S很好地回答了這個問題。我有一個暗示,我經常使用,可能會阻止這種不同步的情況。而不是兩個試圖共享一個模型文件的Xcode項目,只需創建一個包含兩個目標的Xcode項目。每個目標將使用相同的模型文件,從該模型派生的任何類定義以及可能的其他代碼。我的第二個目標是生成數據庫的Mac OS命令行程序,而我的第一個目標仍然是讀取該數據庫的iOS應用程序。 Mac OS目標將覆蓋項目子目錄中的數據庫文件,確保它是最新的。如果我對模型進行了任何更改,Xcode都知道要更新這兩個目標。

+0

是的兩個目標將是一個很好的解決方案,謝謝! –

+0

謝謝,它的工作! –

1

您是否以任何方式更改模型定義?你所看到的錯誤是因爲模型與創建模型之間有一些區別,並且從你嘗試引用它的時候開始。你在模擬器上運行嗎?嘗試刪除兩個應用以清除與其相關的數據,因爲它可能已過時。之後只需重建您的兩個項目,因爲它會更新核心數據庫。

編輯:爲了澄清一點,你的核心數據模型不同步,這通常是由你建立和運行一個應用程序,並創建一個數據庫,然後重新定義你的對象模型,這可以做到多種方式,很可能是由於添加了一個屬性或實體。因此,當您嘗試加載數據庫時,應用程序和核心數據正在查找的字段不存在,因爲創建數據庫時它們不存在。我希望這有幫助。

+0

謝謝您的完整答案。步驟:我在我的主項目中創建空數據庫。然後我在InitializeDataBase項目數據庫中創建(僅創建,沒有任何數據)。之後,我將此* .sqlite文件複製到文件夾與main.sqlite(數據庫名稱是相同的),並用new替換舊的。因此,我不更改xcdatamodel中的任何內容,但問題仍然存在。並且有一個有趣的事實 - 當我比較FilesMerge中的兩個* .sqlite文件實用程序,第一個來自主proj不是空的 - 它有表的desription,與第二個proj的sqlite文件相反,這是空的。感謝您的關注。 –

+0

嗯......所以你會替換你的應用程序引用的實際創建的數據庫?你有沒有可能向我們提供你正在得到的確切的錯誤信息? –

相關問題