Я пишу простое приложение Какао в 10.6.Во время работы программы произошел сбой питания (программа периодически сохраняет данные в хранилище данных), и файл sqlite, используемый моей программой, каким-то образом поврежден.
Я создаю контекст управляемого объекта встандартным способом:
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
и обычно все нормально, но на этот раз при чтении объекта:
NSLog(@"%@",dir.files);
получаю:
2011-06-03 11:33:38.079 Backup Check[1927:3c03] Relationship fault for
(<NSRelationshipDescription: 0x100562230>), name files, isOptional 1,
isTransient 0, entity Directory, renamingIdentifier files, validation
predicates (
), warnings (
), versionHashModifier (null), destination entity File, inverseRelationship
directory, minCount 0, maxCount 0 on 0x10058bbc0
Iпопробовал инструмент sqlite3 в командной строке, и многие вещи можно прочитать правильно, но для некоторых операций чтения таблиц я получаю кучу записей таблицы, а затем:
SQL error: database disk image is malformed
Я предполагаю, что сбой питанияпроизошло именно во время сохранения.У меня есть пара вопросов: 1) Как я могу обнаружить / восстановить после этого?Прямо сейчас я не получаю никаких ошибок, которые я вижу, когда создается объектный контекст.Кроме того, многие из таблиц без ошибок, и только при углублении в подтаблицы я получаю эту ошибку отношения.Я не могу проверить ноль, потому что объект возвращается - это просто не NSSet.Это какой-то объект вины отношений.2) Как я могу предпринять шаги для предотвращения коррупции в будущем?Существует ли простой способ проверки согласованности при создании контекста управляемого объекта, и, если обнаружено повреждение, я могу вернуться к старой версии?В каталоге поддержки приложений я вижу только один файл, который является поврежденной базой данных.