У меня возникла очень любопытная проблема, связанная с миграцией CoreData.iOS 7 - Миграция CoreData - Xcode 5
В принципе, у меня есть 2 объекта, где в одном из них я добавляю свойство, а в другом я изменяю тип свойства из NSString в NSArray (Transformable). До сих пор, так хорошо, он работает хорошо, были проведены тесты и целостность данных была неповрежденной после миграции.
Проблема возникает, если я запускаю тот же самый код на Xcode 5 (я не знаю, связано ли это с iOS SDK 7.0 или Xcode 5), но миграция запускает и развращает данные.
В итоге я создал простой проект, чтобы продемонстрировать, что происходит. https://dl.dropboxusercontent.com/u/1393279/CoreDataMigration.zip
Шаги по воспроизведению является: - На Xcode 5 (IOS SDK 7.0), вы можете использовать тренажер -
1 - Открыть проект "BeforeMigration" и выполнить. См. Журналы и созданные данные, никаких проблем до сих пор;
2 - Остановить проект;
3 - Открыть проект «После миграции», выполнить и запустить.
4 - Смотрите, что миграция выполняется, но данные повреждается:
2013-11-13 12:22:29.778 CoreDataMigration[7223:70b] CoreData: error: exception during fetchRowForObjectID: * -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x43, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) with userInfo of (null) 2013-11-13 12:22:29.782 CoreDataMigration[7223:70b] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x43, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)'
AFAIK, непонятный архив означает испорченные данные по CoreData.
Что трудно понять, так это то, что тот же самый точный код работал раньше, поэтому, если это логическая проблема, это должно произойти на Xcode 4.5. Я искал CoreData Diffs, но не нашел ничего подходящего.
Если у кого-нибудь есть представление о том, что может быть проблемой, я был бы признателен. Спасибо.
Что вы имеете в виду, вы изменили свойства к NSArray? Core Data не имеет типа массива. Как вы сохраняете данные и как вы переносите NSString в NSArray? –
Извините, я перешел на трансформируемое – iDevzilla
Я обнаружил, что проблема возникает, если я вызываю «backupSourceStoreAtURL». Кажется, я больше не могу переименовать файл .sqlite. Не знаю, почему. – iDevzilla