Модель отображения Coredata на моих старых базах данных не работает - PullRequest
1 голос
/ 22 февраля 2012

Я использую CoreData для одной из своих баз данных, и у меня возникают проблемы с обновлением моего приложения.

Мои старые базы данных больше не загружаются ... Я получаю сообщение об ошибке "Ошибка какао 134190", которое, по моему мнению, означает, что выводимая модель сопоставления не работает.

Когда я начал редактировать эту версию своего приложения, я создал новую версию модели и просто добавил один новый атрибут для одной сущности и два новых атрибута для другой сущности. Ничего не было изменено или удалено.

Я проверил в каталоге моего приложения, и все версии моделей там.

У меня даже есть снимок моей предыдущей версии приложения, и с этим снимком я могу загрузить свои файлы основных данных.

Чтобы отладить, что идет не так, я взял точную модель данных из моего предыдущего снимка и использовал ее в моей текущей версии, и я все еще получаю ошибку.

Я даже сделал "diff" для каждого файла в моих пакетах каталогов ".app", и есть только два файла, которые отличаются между ними. Одним из них является действительный двоичный файл для приложения, а другим - файл «Info.plist». Я посмотрел на файлы Info.plist, и они тоже в основном идентичны (у новой версии более новая версия комплекта, но никаких других изменений).

Есть идеи, почему выводимое отображение нарушено?

Я получаю ту же ошибку, даже если модели данных полностью не изменились с моей последней версией, которая работает.

Это очень расстраивает.

Любая информация о том, как отследить подобные проблемы в будущем, также будет принята с благодарностью !!!

Ответы [ 2 ]

0 голосов
/ 18 апреля 2014

Я не верю, что базовые данные действительно заботятся о том, где находится файл базы данных, но я могу ошибаться. В те времена, когда я видел эту ошибку, в частности «Ошибка какао 134190», при попытке сделать вывод о сопоставлении модели, на самом деле была проблема с попыткой перехода на следующую версию модели.

Например, когда я нашел эту ветку сегодня, потому что помогал кому-то с этой проблемой, реальной проблемой было то, что тип одного из атрибутов был случайно изменен. Автоматическая миграция не может справиться с такого рода изменениями.

Несколько простой способ взглянуть на изменения между двумя версиями модели - это изменить сами файлы описания в командной строке с помощью diff:

diff yourNameHere.xcdatamodeld/yourNameHere5.xcdatamodel/contents yourNameHere.xcdatamodeld/yourNameHere4.xcdatamodel/contents 

(Предполагается, что у вас есть описание базовой модели данных с именем «yourNameHere», и вы смотрите на проблему при переходе с версии 4 на 5. Вам нужно будет настроить ее для конкретных файлов.) В этой разнице вы должны увидеть какие бы дополнительные вещи вы ни добавили, но вы действительно ищете что-то вроде изменения типа, когда этого не должно быть.

0 голосов
/ 23 февраля 2012

Я нашел ответ ... проблема была в том, что в моей новой версии я переставлял расположение моих файлов. Я сделал это, просто переместив базу данных в новое место. Чего я не осознавал, так это того, что в базах данных coredata есть некоторые сведения о встроенном пути, и вы не можете просто переместить их.

Мне нужно было изменить расположение базы данных, используя метод NSPersistentStoreCoordinator:

migratePersistentStore: toURL: опции: withType: ошибка:

Я виноват, но мне бы очень хотелось, чтобы сообщения об ошибках в основных данных не были столь загадочными.

В следующей версии моего приложения я собираюсь полностью удалить основные данные.

Рон

...