yedekleme için Dropbox'ı kullanır ve veri geri bir çekirdek veri tabanlı bir uygulama. Yedeklediğim yol çok açık. .sqlite dosyasını kullanıcının dropbox'ına kopyalarım.yedekleme .sqlite (Çekirdek veri)
Şimdi benim yedekleme ve işlevselliği geri iyi çalışıyor. Sorun .sqlite dosyasının kendisi ile. .sqlite dosyasının tamamlanmamış olduğu anlaşılıyor.
benim uygulamada yaklaşık 125 girdileri girdi ve bir yedek sürdü. Yedekleme benim dropbox'ımda göründü, ancak içerikleri görmek için bir .sqlite explorer aracı kullandığımda, sadece 117. girişe kadar kayıtları görüyorum.İlk girdiyi güncelleştirmeyi denedim ve daha sonra tekrar .sqlite dosyasını gözlemlemeyi denedim ancak bir daha değiştirmem.
Daha da garip olan şey, uygulamanın tüm değişiklikleri kaydetmiş gibi göründüğü. Yeni bir giriş eklediğimde veya mevcut olanı güncellediğimde ve uygulamayı yeniden başlattığımda, yeni eklenen veriler devam ediyor gibi görünüyor. Ancak bu yeni eklenen veriler .sqlite dosyasımda görünmüyor.
Bu kodu kullanarak yedekleme ediyorum:
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];
}
Ben de simülatörümüzün klasöründen .sqlite dosyayı kopyalanıp .sqlite tarayıcıda görmeye çalıştı. Hala aynı davranışı sergiliyor. Bunun olması için bir sebep var mı?
Peki ne önerirsiniz? Apple ikinci yaklaşımınızı önerir, ancak bunu dropbox ile nasıl kullanabileceğimi anlamıyorum (iCloud için uyarlanmış görünüyor). WAL modunu şimdi devre dışı bırakırsam, girilmiş olan verileri kaybeder miyim?Ve .sqlite dosyası ve wal dosyası ile bir zip dosyası oluşturma ve yedekleme olarak kaydetme hakkında ne düşünüyorsunuz (ve geri yüklemek için tersi)? –
@GauravWadhwani: Bu cevapta http://stackoverflow.com/a/21002923/1187415 adresinde store_mode = DELETE ile mağazayı açmanız * verilerinizi yok etmediğini, ancak kendim test etmediğimi belirtiyor. İkinci yaklaşımla muhtemelen önce ayrı bir (tek dosya) depoya yedeklemeniz gerekir, bu da daha sonra dropbox'a taşıyabilirsiniz (ancak dropbox işlevlerine aşina değilim). - Üzgünüm, sana tavsiyede bulunamam. Belki başka bir cevap gelecek ve daha fazla yardımcı olacaktır. –
Cevabınız için teşekkürler. Sorunumu çözmeme yardım etti :) –