SQLite «образ диска базы данных искажен»
У меня проблемы с приложением, в котором база данных SQLite повреждена. Ранее был странный случай этого, но, похоже, он стал намного более распространенным после выхода iOS 7.1.
Я использую оболочку SQLite отМаттео Бертоцци что вы можете найти здесь:https://github.com/ConnorD/simple-sqlite
База данных повреждена и выдает ошибкуdatabase disk image is malformed
некоторые запросы могут быть выполнены, но существующие данные испорчены.
Я искал высоко и низко и не могу найти решение, я надеюсь, что у кого-то здесь есть некоторые идеи, так как это становится более распространенной проблемой после обновления iOS.
Я пробовал эти команды восстановления:
[sqlite executeNonQuery:@"pragma integrity_check"];
[sqlite executeNonQuery:@"reindex nodes"];
[sqlite executeNonQuery:@"reindex pristine"];
И вывод был:
SQLite Step Failed: database disk image is malformed
SQLite Prepare Failed: unable to identify the object to be reindexed
- Query: reindex nodes
SQLite Prepare Failed: unable to identify the object to be reindexed
- Query: reindex pristine`
С дальнейшей копкой я обнаружил эту проблему:Базовые данные и iOS 7: различное поведение постоянного хранилища который упоминает проблемы с SQLite после iOS7.
Хотя я понятия не имею, как использоватьNSPersistentStore
так я пробовал бегать[sqlite executeNonQuery:@"pragma journal_mode = DELETE"];
и он просто сказалSQLite Step Failed: unknown error
.
Кто-нибудь еще испытывает это или указывает мне правильное направление?
Тем временем я чувствую себя такNSPersistentStore
это то, что я потенциально должен делать .. придется изучить это.
редактировать:
Из того, что я нашел, вы используете толькоNSPersistentStore
когда база данных не будет обновляться, а моя регулярно.
Вот как я открываю базу данных:
sqlite = [[Sqlite alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"HomeOpenDatabase8.sql"];
if (![sqlite open:writableDBPath]) {
NSLog(@"DB Not Writable");
return;
} else {
NSLog(@"All good");
}
Поэтому я предполагаю, что мне нужно найти способ установитьpragma journal_mode = DELETE
сюда..?
редактировать 2:
Я не уверен, что это связано сjournal_mode
как я не используюCore Data
- Вернуться к доске для рисования.
Самым большим признаком для меня является появление этой ошибки, поэтому вскоре после выхода iOs 7.1 это, безусловно, не может быть совпадением. Я продолжу пытаться повторить проблему на моем устройстве.