SQLite "la image del disco de la database está mal formada"

Estoy teniendo problemas con una aplicación donde la database SQLite se está corrompiendo. Hubo un caso extraño de esto anteriormente, pero parece haberse vuelto mucho más común después del lanzamiento de iOS 7.1.

Estoy usando el contenedor SQLite de Matteo Bertozzi que puedes encontrar aquí: https://github.com/ConnorD/simple-sqlite

La database se corrompe y escupe la image de error de la database disk image is malformed , algunas consultas pueden ejecutarse pero los datos existentes se vuelven dañados.

He buscado alto y bajo y no puedo encontrar una solución, espero que alguien tenga algunas ideas, ya que se está convirtiendo en un problema más común después de la actualización de iOS.

He intentado estos commands de reparación:

 [sqlite executeNonQuery:@"pragma integrity_check"]; [sqlite executeNonQuery:@"reindex nodes"]; [sqlite executeNonQuery:@"reindex pristine"]; 

Y el resultado fue:

 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` 

Con un poco más de búsqueda encontré este problema: Core Data y iOS 7: Diferentes comportamientos de almacenamiento persistente que menciona problemas con SQLite después de iOS7.

Aunque no tengo idea de cómo usar NSPersistentStore , intenté ejecutar [sqlite executeNonQuery:@"pragma journal_mode = DELETE"]; y simplemente dijo SQLite Step Failed: unknown error .

¿Alguien más está experimentando esto o me señala en la dirección correcta?

Mientras tanto, siento que NSPersistentStore es algo que potencialmente debería estar haciendo … Tendré que investigar eso.

editar:

Por lo que he encontrado, solo utilizas NSPersistentStore cuando la database no se va a actualizar, lo que es mío regularmente.

Aquí es cómo abro la database:

 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"); } 

Entonces, supongo que necesito encontrar una manera de configurar pragma journal_mode = DELETE esta manera ..?

editar 2:

No estoy convencido de que se journal_mode hacer con journal_mode porque no estoy usando Core Data , de vuelta al tablero de dibujo.

La bandera más grande para mí es que este error apareció tan pronto después de que se lanzó iOs 7.1, seguramente no puede ser una coincidencia … Seguiré intentando replicar el problema en mi dispositivo.

    Tuve este problema también en iOS 7.0.6 usando FMDB. Lo reparé copyndo a la Mac y usando estos commands:

    http://www.dosomethinghere.com/2013/02/20/fixing-the-sqlite-error-the-database-disk-image-is-malformed/

    El volcado de mi database era bastante grande a 200 MB, así que utilicé Hexfiend para cortar los commands de transacción y rollback.