Использование mogenerator с сущностями Core Data приводит к ошибке при сохранении хранилища данных.

У меня есть приложение для iPad, в котором я использую MagicalRecord для сохранения объектов Core Data в SQLite d/b. Все работало нормально, пока я не решил использовать FTASync для синхронизации основных данных с Parse.com.

Часть требований FTASync заключается в том, что вы должны использовать mogenerator для создания файлов классов сущностей. Теперь я получаю эту ошибку:

2013-12-14 12:38:59.375 foo[5451:70b] Failed to save to data store: The operation couldn’t be completed. (Cocoa error 1560.)
2013-12-14 12:38:59.380 foo[5451:70b]   DetailedError: {
    NSLocalizedDescription = "The operation couldn\U2019t be completed. (Cocoa error 1570.)";
    NSValidationErrorKey = objectId;
    NSValidationErrorObject = "<PreferenceData: 0x1149c3a0> (entity: PreferenceData; id: 0x114a7eb0 <x-coredata://03C39CC9-AC6C-4E56-BB5A-67038ACB6801/PreferenceData/p25> ; data: {\n    aAddlSvcs1 = \"\";\n    aAddlSvcs10 = \"\";\n    aAddlSvcs11 = \"\";\n    aAddlSvcs12 = \"\";\n    aAddlSvcs2 = \"\";\n    aAddlSvcs3 = \"\";\n    aAddlSvcs4 = \"\";\n    aAddlSvcs5 = \"\";\n    aAddlSvcs6 = \"\";\n    aAddlSvcs7 = \"\";\n    aAddlSvcs8 = \"\";\n    aAddlSvcs9 = \"\";\n    aApptInterval = \"\";\n    aDeleteOldAppts = \"-1\";\n    aDoubleBooking = \"-1\";\n    aHideHelpBtns = 0;\n    aHourFormat12 = 0;\n    aShopCloses = 1200;\n    aShopOpens = 1000;\n    createdHere = 1;\n    deleted = 0;\n    objectId = nil;\n    syncStatus = 2;\n    updatedAt = nil;\n})";
}

Если я хочу синхронизировать хранилище Core Data с помощью FTASync, я должен использовать mogenerator.

Итак, что именно это говорит мне, кроме «это не может быть завершено»? Как я могу это исправить?

ОБНОВЛЕНО: это изображение из инспектора модели данных XCode.

введите здесь описание изображения


person SpokaneDude    schedule 14.12.2013    source источник
comment
Просто мысль, но это может быть потому, что вы определили objectId как атрибут объекта, когда NSManagedObject сам имеет определенный метод -objectID?   -  person indragie    schedule 15.12.2013
comment
Еще одна мысль: NSValidationErrorKey = objectId звучит так, как будто это свойство не удовлетворяет некоторым ограничениям, определенным в модели Core Data. Например, если атрибут не является необязательным, objectId = nil не будет допустимым значением.   -  person Martin R    schedule 15.12.2013
comment
ОБНОВЛЕНО objectID находится в коде, сгенерированном mogenerator! Как я уже сказал, я не могу использовать FTASync, если не использую mogenerator. Есть идеи по этому поводу?   -  person SpokaneDude    schedule 15.12.2013
comment
@spokane-dude: Ваше сообщение об ошибке содержит NSValidationErrorKey = objectId (со строчной буквой d). Откуда это?   -  person Martin R    schedule 15.12.2013
comment
@MartinR из файла _Preferences.m, сгенерированного mogenerator: - (PreferenceDataID*)objectID { return (PreferenceDataID*)[super objectID]; }   -  person SpokaneDude    schedule 15.12.2013
comment
@spokane-dude: Но это objectID (с заглавной D). Сообщение об ошибке примерно objectId (d в нижнем регистре).   -  person Martin R    schedule 15.12.2013
comment
Э-э-э... позвольте мне взглянуть на это...   -  person SpokaneDude    schedule 15.12.2013
comment
@MartinR Все это происходит из кода FTASync ... используется повсеместно! Я подозреваю, что он берет на себя материал MagicalRecord для всех объектов Core Data ... Версия ОС FTASync старше 2 лет; Я пытался связаться с автором два раза по электронной почте и один раз, оставив вопрос на GitHub... НИЧЕГО! очень разочаровывает, что он даже не признал электронные письма по крайней мере! У меня есть вопрос на форуме Parse.com с просьбой о помощи, так как они разветвили код FTASync и внесли в него изменения. (долговато да?) :D   -  person SpokaneDude    schedule 15.12.2013
comment
@MartinR Пожалуйста, перепишите свой комментарий выше как ответ, чтобы я мог закрыть это. Я отказываюсь от FTASync и пользуюсь учебным пособием Рэя Вендерлиха по синхронизации с Parse.com. ссылка. Спасибо за вашу настойчивость, я ценю это.   -  person SpokaneDude    schedule 15.12.2013
comment
@spokane-dude: Уже есть ответ о том, что это должна быть ошибка проверки, нет необходимости повторять это. - К сожалению, у меня нет опыта работы с FTASync или parse.com, поэтому я не могу комментировать преимущества или недостатки.   -  person Martin R    schedule 15.12.2013


Ответы (1)


Вы определили некоторые правила проверки в xcdatamodel с помощью редактора модели: минимальные/максимальные значения, требуемое отношение, минимальная/максимальная длина строки.

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

Вы можете вызвать -validateForUpdate: (или -validateForInsert: или -validateForDelete:) в коде, который создает ваш экземпляр PreferenceData. Вызовите его несколько раз при построении объекта, и вы увидите, где ошиблись.

person Hal Mueller    schedule 14.12.2013