2012-09-25 47 views
0

我正在維護一個已經在AppStore上生活了幾個月的應用程序。 我的應用程序使用核心數據,並以某種方式設法丟失了我的xcdatamodel的所有以前的版本。如何重新創建xcdatamodeld

我希望能夠執行輕量級遷移。我需要做的就是給我的一個實體添加一個屬性。所以,我遵循了創建模型版本的正確步驟。

顯然,我修改了原來的xcdatamodel。因此,當我測試遷移時,它會失敗,並顯示錯誤代碼= 134130「無法找到源存儲模型」。由於在設備/模擬器上沒有sqlite文件時該應用運行正常,我已經得出結論原始xcdatamodel已被修改

假設我的邏輯到目前爲止,我如何創建一個xcdatamodel來匹配用戶設備上的sqlite文件。他們丟失數據是不可接受的。

謝謝。

回答

0

打開核心數據模型文件(例如空白文件)後,選擇Editor -> Import,然後從先前版本的應用程序中找到.mom文件。

請參閱this answer

+0

不知何故,以前的所有版本都已丟失。我使用GIT和快照,甚至是Dropbox,但我只有當前版本的文件。 – Blamdarot

+0

@Blamdarot你的git倉庫發生了什麼? –

+0

從應用程序商店獲取您的送貨應用程序中的媽媽文件。 –

2

根據蘋果的核心數據versioning guidelines,核心數據的兩個版本都被視爲是identifical如果:

  • 對於每個實體下面的屬性必須是平等的:姓名,父,isAbstract和屬性。 不比較className,userInfo和驗證謂詞。

  • 對於每個實體中的每個屬性,以下屬性必須相同:name,isOptional,isTransient,isReadOnly,屬性attributeType以及關係destinationEntity,minCount,maxCount,deleteRule和inverseRelationship。

如果您當前的xcdatamodel是一個全新的文件,我不認爲您所做的任何操作都會使原始版本和當前版本匹配。但是,如果當前版本只是原始版本的意外修改版,您可以查看舊版生成的模型文件並嘗試找出更改的內容。

例如:在模型上,您有一個「NSString * age」屬性,但在當前的xcdatamodel上,該屬性爲「NSNumber * age」。

另外,請記住,您看到的錯誤可能是由與DB不同步生成的模型文件引起的,因此請嘗試重新創建它們。

+0

如何「查看[舊]生成的模型文件」? – Blamdarot

+0

當您單擊xcdatamodel中的實體並選擇「編輯器 - >創建NSManagedObject子類」時,可以創建生成的模型文件。如果您使用的是版本控制(Xcode與GIT集成),您可以從那裏獲取舊版本。如果沒有,您可以嘗試在Time Machine中查找它(如果您在Mac上激活了它)。如果沒有這些,你在你原來的文章中說過「我設法丟失了我的xcdatamodel的所有以前的版本」。無論你有哪些版本的xcdatamodel,你都應該擁有以前版本的yout生成的模型文件。 –