2017-01-17 72 views
0

這個問題很少出現,並且時斷時續,但是非常令人不安。核心數據/ SQLite存儲偶爾數據丟失

我有一個使用CoreData與sqlite持久性存儲的應用程序,並且[大部分時間]完美工作。但是,我偶爾會收到我無法找到的數據丟失報告。

當核心數據項改變,我們與呼叫持續到以下:各地是否考慮到內容的保存,一旦這種方法被調用,是

- (void) saveContext 
{ 
    if ([context hasChanges]) 
    { 
     NSError *error = nil; 
     if (![context save:&error]) 
     { 
      NSLog(@"Failed to save context: %@", error); 
      [self displayValidationError:error]; 
     } 
    } 
} 

我的問題中心最終,或者它可能被緩存,並可能會丟失。

我們不確定,但是當一系列的項目輸入後,應用程序停止後,似乎會出現此問題。如果應用程序被用戶強行終止,我們肯定會導致數據丟失。看起來這發生在用戶離開應用程序一段時間並且可能使用該設備用於其他事情時發生。

我從AppDelegate(applicationwillTerminate和applicationWillResignActive)調用saveContext。

所以,我的問題:

  • 從AppDelegate中調用足以確保持久性?
  • 當調用saveContext(如上所示)時,是否還有其他要求保證所有未保存的實體都刷新到磁盤?
  • 我可以忽略一些可能導致這種情況的東西嗎?

TIA對於該主題的任何幫助。我已經能夠發現很少,這似乎與我的問題類似。

回答

0

來自AppDelegate的調用是否足以確保持久性?

不能保證會調用applicationWillTerminate。如果你的應用程序有未保存的數據,並且iOS終止了應用程序(因爲它已經在後臺運行了一段時間),你不能依賴該方法。

當調用saveContext(如上所示)時,是否還有其他要求保證所有未保存的實體都刷新到磁盤?

沒有「對持久存儲的刷新更改」調用。節省是這樣,但你需要在適當的時候保存。

你應該真的保存更改任何時候你有你不想丟失的數據。依靠系統事件意味着您將離開尚未保存的更改,以及可能長時間未保存的更改。如果您想要保留更改,請立即保存。