Я столкнулся с очень досадной ошибкой при использовании Core Data в Mac OS X 10.5.
В моем приложении все сущности имеют классы с одинаковыми именами.
До этого момента я выполнил 5 миграций без проблем.
Я использую хранилище данных XML.
У меня есть V5 моей модели данных с 13 объектами, 4 из которых являются абстрактными. Это выглядит так:
альтернативный текст http://synapticmishap.co.uk/ObjectModel.jpg
Что я делаю
Создать новую версию моих данных
Модель - это V6.
Добавить новый объект (JGToolbarWindow)
и установите родительский элемент в JGWindowBase.
Добавлена модель отображения, которая идет от
V5 до V6. Сохранено.
Установите текущую версию V6.
Сборка и отладка.
У меня включена автоматическая миграция в словаре параметров Координатора постоянного хранилища.
Проблема
Получите ошибку - «Многократная проверка»
произошли ошибки. "
Я установил точку останова и проверил
ошибки проверки. Там долго
список ошибок валидации - есть
кажется, один для каждой записи данных.
Кажется, он удаляет ВСЕ
отношения и так как один из моих
свойства - приложение - установлено в
быть обязательным, это считается
ошибка проверки.
Так что, похоже, проблема заключается в
миграция не может мигрировать
отношения ... хотя
видимо ничего не изменилось так далеко
как отношения идут.
Когда я смотрю в ~ / Библиотека / Приложение
Поддержка / Название моего приложения / Я вижу XML
Хранилище данных, которое имеет то же имя
добавлено .xml.new При взгляде на
этот файл в текстовом редакторе, все
отношения действительно были
раздели.
Что я пробовал
Создание нового хранилища данных XML и
положить в него несколько предметов,
затем пытаясь снова. Я получаю то же самое
ошибки для каждого элемента.
Очистка и восстановление.
Убедиться, что старый .xml.new от
предыдущая проверка была
удален.
Удаление новой версии модели и
повторяя мои действия, чтобы убедиться, что я
не напортачил.
Добавление записей сопоставления для каждого из
абстрактные классы, которые
по умолчанию игнорируется. Добавлено все
атрибуты и отношения. Еще
точно такая же ошибка.
Попытка добавления нового объекта, который
не имеет класса, только на основе
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;
Все, что мне действительно говорит, это то, что он удалил отношение, связанное с элементом, что является обязательным свойством, поэтому он говорит мне, что есть ошибки проверки. Также существует целая нагрузка для приложения, что является другим обязательным свойством.
На мой взгляд, проблема не в ошибках валидации как таковых, а в том, что она, похоже, не переносит никаких отношений вообще .
Я вытаскиваю свои волосы этим. Я бы очень, очень признателен за помощь. И, наконец, цитата из "Звездных войн":
"Помоги мне, переполнение стека. Ты мой
единственная надежда. "