2012-03-27 53 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