2012-03-27 3 views
4

У меня есть существующее приложение для iPad, к которому я только что добавил управление версиями ключевых данных. Я прошел через документацию и выполнил описанные шаги. Теперь после выбора моей новой модели в качестве текущей версированной модели и пытается запустить его на моем DEV устройства от 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

+0

Я не уверен, что я тебя понимаю. У меня есть оригинальное приложение с оригинальной моделью на моем устройстве. Я изменил существующее приложение, чтобы добавить обновление данных с ключевыми данными, добавил новую модель, сделал ее текущей моделью, добавил объект в новую модель. Затем я попытался запустить устройство Dev и получил ошибку выше. Что вы подразумеваете под «версией dev changes»? – daveywc

+0

Я говорил, что если вы используете версию datamodel (например, версия 2.0), а затем добавляете таблицу. При первом запуске кода поверх модели данных версии 1 он будет автоматически переноситься, пока вы добавили код. Теперь, если вы остановите свой код и сделаете больше изменений в модели данных 2.0, он не будет автоматически переноситься, потому что вы только что изменили ту же модель и, вероятно, вам придется удалить и повторно запустить приложение. – Joe

ответ

4

Ну, это была неясная ошибка. Объект, который я добавлял, был назван AppKeys - это должно быть имя объекта, используемого внутренне по основным данным или SQL Lite. Я вернулся к царапинам и обнаружил, что могу добавлять и переносить другие атрибуты и объекты без каких-либо проблем. Однако, если я еще раз попробовал добавить свою сущность с именем AppKeys, то я получил ту же ошибку, что «таблица Z_2TAG уже существует». Поэтому решение моей проблемы заключается в выборе другого имени сущности. Жаль, что это не документировано где-то очевидно - или что ошибка не была более полезной. В любом случае, надеюсь, это может когда-нибудь помочь кому-то еще.

+0

У меня такая же ошибка, код ошибки SQLite: 1, код ошибки SQLite: 1, «таблица ZMEASUREMENT уже существует», и переименование таблицы фиксировало ее для одной ревизии. В следующий раз, когда я попытался выполнить миграцию, я снова получил ту же ошибку для нового имени, «таблица ZMEASUREMENT2 уже существует». –

+0

спасибо @daveywc. его жалкое, как замечательные вещи заставляют вас задаваться вопросом иногда. может быть NSEntityMigrationPolicy - решение для атрибутов и отношений (это то, что я нашел по их определению): http://stackoverflow.com/questions/7027108/core-data-versioning-and-migrating-with-custom-policy – khunshan

+0

У меня было аналогичная проблема, когда отношения были названы «группами», и это, по-видимому, зарезервированное имя в iOS 7, но не 8. Переименование отношения к чему-то еще решило проблему. – nrj

8

В моем случае та же самая ошибка появилась из-за Переименование ID, который был установлен в инспекторе модели данных для Entity. После того, как я удалил переименование ID, проблема исчезла.

+3

Я сделал то же самое, в то время как вставка идентификатора переименования I по ошибке задала идентификатор переименования для объекта вместо атрибута. –

+0

@ VickyDhas Thx! Я тоже сделал ту же ошибку! Я пропустил мой git diff 5 раз, пока не прочитал ваш комментарий! * Facepalm * – Buju

Смежные вопросы