Possiedo un'applicazione basata su dati di base che utilizza Dropbox per eseguire il backup e ripristinare i dati. Il modo in cui eseguo il backup è abbastanza semplice. Copio il file .sqlite nella casella personale dell'utente.Backup .sqlite (dati principali)
Ora la mia funzionalità di backup e ripristino funziona correttamente. Il problema è con il file .sqlite stesso. Sembra che il file .sqlite sia incompleto.
Ho inserito circa 125 voci nella mia applicazione e ho eseguito un backup. Il backup è apparso nella mia casella personale, ma quando uso uno strumento .sqlite explorer per vedere i contenuti, vedo solo i record fino alla 117esima voce.
Ho tentato di aggiornare la prima voce e poi di nuovo osservando il file .sqlite ma non ho più modificato.
Ciò che è ancora più strano è che l'app sembra aver registrato tutte le modifiche. Quando aggiungo una nuova voce o ne aggiorno una esistente e riavvia l'app, i dati aggiunti di recente sembrano persistere. Ma questi dati aggiunti di recente non compaiono nel mio file .sqlite.
Sto sostenendo utilizzando questo codice:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString *filePath = [[[appDelegate applicationDocumentsDirectory] path] stringByAppendingPathComponent:@"MyApp.sqlite"];
if (account) {
if ([filesystem isShutDown]) {
filesystem = [[DBFilesystem alloc] initWithAccount:account];
[DBFilesystem setSharedFilesystem:filesystem];
}
DBPath *newPath = [[DBPath root] childPath:[NSString stringWithFormat:@"Backup - %@.sqlite", [NSDate date]]];
DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil];
[file writeContentsOfFile:filePath shouldSteal:NO error:nil];
[filesystem shutDown];
}
Ho anche copiato il file .sqlite dalla cartella del simulatore e ha cercato di vedere nel browser .sqlite. Esibisce ancora lo stesso comportamento. Qualche ragione per cui questo deve accadere?
Quindi cosa consiglieresti? Apple consiglia il tuo secondo approccio ma non capisco come potrei usarlo con dropbox (sembra fatto su misura per iCloud). Se disattivo la modalità WAL ora, perderò i dati già inseriti?E cosa ne pensi di creare un file zip con il file .sqlite e il file wal e salvarlo come backup (e fare il reverse per ripristinare)? –
@GauravWadhwani: In questa risposta http://stackoverflow.com/a/21002923/1187415 si afferma che l'apertura dello store con journal_mode = DELETE non * distrugge * i tuoi dati, ma non l'ho testato personalmente. Con il secondo approccio, è necessario prima eseguire il backup su un archivio separato (file singolo) che è possibile quindi spostare nella casella personale (ma non ho familiarità con le funzioni della casella personale). - Scusa, non posso darti dei consigli. Forse un'altra risposta arriverà e aiuterà di più. –
Grazie per la risposta. Mi ha aiutato a risolvere il mio problema :) –