2014-01-30 26 views
5

我發現了一些其他問題,但我沒有得到任何清晰的想法如何保持從舊數據庫的數據,而在iOS應用程序更新。iOS - 在更新到新版本時保留舊的sqlite數據庫

案例1: 我可以保留舊數據庫嗎?

如果情況1爲是: 我可以在舊數據庫中插入新列或做任何更改並且安全嗎?

如果情況1是否: 我可以在新數據庫中獲取舊數據庫數據嗎?舊的數據庫會被刪除嗎?第二種情況:如果我給新的數據庫賦予不同的名稱(它將被包含在捆綁中)?如果給一個新名稱保留舊數據庫,我可以以編程方式刪除舊數據庫?

什麼是最佳實踐?爲數據庫文件命名一個新名稱以保留舊名稱,然後將舊名稱複製到新數據庫並刪除舊數據庫文件?剛開始使用舊的?

尋找幫助.. :)

回答

2

案例1:我可以保留舊數據庫嗎?

是的,更新您的應用程序不會刪除存儲在文檔目錄中的數據庫文件。 (但是,如果它在你的包,它會被刪除)

如果案例1是YES:我可以插入新列或舊的數據庫做任何修改,將它安全嗎?

這將取決於您的實施。您可以使用ALTER TABLE查詢來添加或刪除列。您需要處理代碼中的新更改,否則會導致問題。 添加列不會導致正常情況下的任何問題(取決於插入查詢語句和新的字段限制)

+0

請參閱編輯後的問題。 – Rashad

+0

@Rashad:這取決於你的需要。在我看來,使用舊桌子將是一個好主意。 –

0

這是相當Case 1因爲假設你複製你的.sqlite文件,文檔文件夾,當你更新應用程序將尋找數據庫中可以更新其表,並更新其數據庫沒有丟失任何東西。

+0

請參閱編輯的問題。 – Rashad

+0

這取決於如果您需要更新少量數據和結構不會發生很大變化的場景,請保留舊數據庫將數據導入到新數據庫 – Retro

0

如果我理解您的問題(您正在尋找更新已通過App Store部署的模型),是的,您可以在Xcode中使用.xcdatamodeld格式對現有模型進行升級。來自Apple的Core Data Versioning doc全面涵蓋此主題。

這可能是一個繁瑣的過程,如果您的模型中存儲了寶貴的用戶數據,那麼您需要在推出更新之前詳盡地測試此過程。

向您的模型添加新版本;

  • 選擇xcdatamodel文件(例如model.xcdatamodel)
  • 點擊編輯>添加模型版本
  • 命名新的模型版本(例如模式2),基於模型1
  • 打開Utilities窗格
  • 選擇「模型2」當前模型​​版本

則此方法添加到您的控制器類實現文件,以幫助使小變化到數據模型(改變字段類型,添加列等)。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Model.sqlite"]; 

    NSError *error = nil; 

    // for performing minor changes to the coredata database 
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], 
         NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], 
         NSInferMappingModelAutomaticallyOption, nil]; 

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
    return _persistentStoreCoordinator; 
} 

此外,值得注意的是:蘋果建議你only store user relevant files in the Documents folder。 SQLite數據庫文件和類似文件應該存儲在/ Library/Application Support中。

+0

我會試試看。我的應用程序尚未部署,但它有3個版本,我打算快速發佈V1,爲此我需要清楚使用數據庫。昨天我試圖使用sqlite。但我可以通過代碼存儲數據。有沒有訪問問題? – Rashad

相關問題