Ошибки валидации с основной миграцией данных - PullRequest
2 голосов
/ 13 октября 2009

Я столкнулся с очень досадной ошибкой при использовании Core Data в Mac OS X 10.5.

В моем приложении все сущности имеют классы с одинаковыми именами.

До этого момента я выполнил 5 миграций без проблем.

Я использую хранилище данных XML. У меня есть V5 моей модели данных с 13 объектами, 4 из которых являются абстрактными. Это выглядит так: альтернативный текст http://synapticmishap.co.uk/ObjectModel.jpg

Что я делаю

  1. Создать новую версию моих данных Модель - это V6.

  2. Добавить новый объект (JGToolbarWindow) и установите родительский элемент в JGWindowBase.

  3. Добавлена ​​модель отображения, которая идет от V5 до V6. Сохранено.

  4. Установите текущую версию V6.

  5. Сборка и отладка.

У меня включена автоматическая миграция в словаре параметров Координатора постоянного хранилища.

Проблема

  1. Получите ошибку - «Многократная проверка» произошли ошибки. "

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

  3. Кажется, он удаляет ВСЕ отношения и так как один из моих свойства - приложение - установлено в быть обязательным, это считается ошибка проверки.

  4. Так что, похоже, проблема заключается в миграция не может мигрировать отношения ... хотя видимо ничего не изменилось так далеко как отношения идут.

  5. Когда я смотрю в ~ / Библиотека / Приложение Поддержка / Название моего приложения / Я вижу XML Хранилище данных, которое имеет то же имя добавлено .xml.new При взгляде на этот файл в текстовом редакторе, все отношения действительно были раздели.

Что я пробовал

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

  2. Очистка и восстановление.

  3. Убедиться, что старый .xml.new от предыдущая проверка была удален.

  4. Удаление новой версии модели и повторяя мои действия, чтобы убедиться, что я не напортачил.

  5. Добавление записей сопоставления для каждого из абстрактные классы, которые по умолчанию игнорируется. Добавлено все атрибуты и отношения. Еще точно такая же ошибка.

  6. Попытка добавления нового объекта, который не имеет класса, только на основе NSManagedObject, который имеет JGWindowBase в качестве родителя. Снова, не удалось.

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

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

Ошибка

Когда я ставлю точку останова на строку presentError ниже

if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
                                                  configuration:nil 
                                                            URL:url 
                                                        options:options 
                                                          error:&error]){
          [[NSApplication sharedApplication] presentError:error];
}

и изучите ошибку userInfo, я получаю множество ошибок, подобных этой:

Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x67ebfd0 "item is a required value."

po (NSArray *)0x67ebfd0

дает:

NSLocalizedDescription = "item is a required value.";
NSValidationErrorKey = item;
NSValidationErrorObject = <NSManagedObject: 0x45d5830> (entity: JGLogEntry; id: 0x4baccb0 <x-coredata://B597E13E-BE74-402E-BF00-5E1D57898406/JGLogEntry/p13942> ; data: {
duration = nil;
item = nil;                   // <<< Here's the problem.
processBundleID = nil;
processID = nil;
processName = nil;
startTime = 2009-10-09 16:41:44 +0100;
stopTime = 2009-10-09 16:42:17 +0100;
windowDocumentPathOrURL = nil;
windowID = nil;
windowTitle = nil;

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

На мой взгляд, проблема не в ошибках валидации как таковых, а в том, что она, похоже, не переносит никаких отношений вообще .

Я вытаскиваю свои волосы этим. Я бы очень, очень признателен за помощь. И, наконец, цитата из "Звездных войн":

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

1 Ответ

0 голосов
/ 07 декабря 2009

Обновление до снежного барса

Snow Leopard, похоже, решает эту проблему - у меня не было проблем с переносом данных с момента обновления.

В качестве альтернативы, я полагаю, что это может исчезнуть, потому что я переключился на хранилище данных SQLite, хотя я думаю, что более вероятно, что миграции с абстрактными объектами немного не работают на Leopard.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...