2012-03-27 48 views
4

我有,我剛剛添加的核心數據版本現有的iPad應用。我已經完成了文檔並遵循了詳細的步驟。現在,選擇我的新模式作爲當前版本的模型,並試圖在Xcode我的開發設備上運行它後,我收到以下錯誤:核心數據遷移 - 表已經存在

2012-03-28 07:35:42.137 DocsOnTap[2603:707] CoreData: error: (1) I/O error for database at /var/mobile/Applications/06EECF01-3598-4513-8A3A-BE4FD49EEBF6/Documents/.DocsOnTap.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'table Z_2TAG already exists'

我對我的模型所做的唯一的變化是在一個單一的加新的實體。我在我的模型中有一個名爲Tag的表 - 這似乎是錯誤所指的。

如果我恢復我目前的版本控制模式回到以前的模式版本,那麼我可以從我的Xcode開發設備上運行沒有錯誤我的應用程序。

我已閱讀,有可能試圖在開發設備上使用的核心數據遷移問題。不過,我只想測試這個過程,以確保當我們在Appstore中更新我們的應用程序時,遷移將按照我們客戶的預期進行。

+0

您需要與原始模型要測試遷移每次安裝原有的應用程式。當您在dev中對新版本進行重大更改時,您必須刪除並重新安裝應用程序(除非您更新了dev版本)。 – Joe 2012-03-27 20:49:01

+0

我不確定我是否理解你。我的原始模型在我的開發設備上有我的原始應用程序。我更改了現有的應用程序以添加核心數據版本控制,添加了新模型,使其成爲當前模型,並將實體添加到新模型中。然後我嘗試在dev設備上運行,並得到上述錯誤。 「版本變更」是什麼意思? – daveywc 2012-03-27 20:57:09

+0

我在說,如果你使用datamodel(例如版本2.0),然後添加一個表格。您首次在版本1數據模型上運行代碼時,只要您添加了代碼,它就會自動遷移。現在,如果您停止代碼並對2.0數據模型進行更多更改,它將不會自動遷移,因爲您只是修改了相同的模型,並且可能需要刪除並重新運行應用程序。 – Joe 2012-03-28 02:38:28

回答

4

嗯,這是一個令人費解的錯誤。我正在添加的實體名爲AppKeys - 這必須是核心數據或SQL Lite內部使用的實體的名稱。我回過頭來,發現我可以毫無問題地添加和遷移其他屬性和實體。但是,如果我再次嘗試添加名爲AppKeys的實體,那麼我得到了同樣的錯誤,說'表Z_2TAG已經存在'。所以解決我的問題是選擇另一個實體名稱。遺憾的是,這沒有記錄在某個顯而易見的地方 - 或者錯誤沒有多大幫助。無論如何,希望這可能會幫助別人有一天。

+0

我得到了同樣的錯誤,SQLite的錯誤代碼:1,SQLite錯誤代碼:1,'表ZMEASUREMENT已經存在',並重命名該表修復它的一個修訂版。下次嘗試遷移時,我再次得到了同樣的錯誤,名稱爲'table ZMEASUREMENT2 already exists'。 – 2012-09-06 20:36:43

+0

感謝@daveywc。它可憐的美好的事物有時讓你感到奇怪。可能是NSEntityMigrationPolicy的屬性和關係的解決方案(這就是我從他們的定義找到)也:http://stackoverflow.com/questions/7027108/core-data-versioning-and-migrating-with-custom-policy – khunshan 2015-01-20 10:58:26

+0

我有一個關係被命名爲「groups」的類似問題,這顯然是iOS 7中的保留名稱,但不是8.將關係重命名爲其他內容解決了問題。 – nrj 2015-04-21 15:27:51

8

在我的情況相同的錯誤,以更名ID這是在數據模型檢查器實體設置出現所致。我刪除重命名ID後,問題消失了。

+3

我做了同樣的事情,而錯誤地插入重命名Id我設置了實體的重命名Id而不是屬性。 – 2015-11-23 05:48:30

+0

@VickyDhas Thx!我也犯了同樣的錯誤!我忽略了我的git diff 5次,直到我閱讀你的評論! *捂臉* – Buju 2016-06-30 13:51:21