Облегченная миграция не удалась

На Stack Overflow уже есть несколько вопросов по упрощенной миграции, но в большинстве из них есть дополнительные ключи. Я делаю самую простую миграцию, и она терпит неудачу. Я делал это несколько раз в прошлом без проблем, так что это становится довольно неприятно. Такое ощущение, что это может быть проблема с Xcode 4, что просто ужасно, когда дело доходит до работы с Core Data.

У меня есть версия старой модели (на самом деле несколько старых версий) и новая версия, помеченная как активная. У меня есть два варианта логических значений, автоматически переносятся и делаются выводы:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

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

Я запускаю приложение и получаю сообщение «Не удается найти или автоматически определить модель сопоставления для миграции», что кажется абсурдным. Есть только одно изменение - и это необязательно!

Что мне не хватает? Это должно быть что-то глупое.


person Cory Imdieke    schedule 03.05.2011    source источник
comment
может быть, одна из ваших моделей не является членом цели, которую вы используете?   -  person sgosha    schedule 04.05.2011


Ответы (1)


Как вы сказали, просто добавление столбца не должно вызывать эту ошибку. Эта ошибка обычно возникает, например, при удалении необязательного поля (в этом случае CoreData не знает, что делать с существующими значениями NULL) или при изменении типа поля. Что не ваш случай. Возможно, вы случайно куда-то нажали...

Чтобы диагностировать, что происходит, окружите свой код @try{}@catch{}, что, я думаю, вы уже делаете, и взгляните на перехваченное свойство Exception e.userInfo, большую часть времени CoreData дает все подробности о том, что вызвало ошибку, например, какое поле, какая причина.. , Это может помочь!

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

person Vincent Guerci    schedule 03.05.2011
comment
После безуспешных попыток исправить проблему (включая удаление модели и ее повторное создание несколько раз) я, наконец, сдался и сделал то, что мне нужно было сделать, не меняя модель базы данных. Я все равно отмечу это как ответ, потому что определенно есть полезная информация для тех, кто пытается отладить глупую проблему с Core Data. - person Cory Imdieke; 05.05.2011
comment
черт возьми, я ненавижу, когда кто-то (включая меня) должен вот так зайти в тупик, не могли бы вы вставить информацию о пользователе из Core Data Exception, в ней должно быть что-то интересное! Если нет, сообщение об ошибке в Apple должно помочь. В любом случае, спасибо, что приняли мой ответ. - person Vincent Guerci; 06.05.2011