2015-02-12 48 views
1

我對商店的應用程序,它指向文檔directory.Here的舊代碼的appname.sqlite文件:預先填充應用程序包中的sqlite文件。現有用戶更新後會發生什麼?

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

NSError *error = nil; 

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption : @YES,NSInferMappingModelAutomaticallyOption : @YES}; error:&error]) { 

    abort(); 
} 

我現在想給更新。這一新功能是一個預充式.sqlite數據庫,其中有在bundle.See以下

NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"MyNewPrefilled" ofType:@"sqlite"]]; 

它的工作確定對新安裝的app.But會發生什麼誰已經登錄,並有一個用戶很多保存在數據庫中的數據(應用程序目錄中的舊sqlite)?我會失去它,因爲我現在指向應用程序包(MyNewPrefilled.sqlite)中的.sqlite,而不是應用程序目錄中的.sqlite。我怎樣才能從舊版doc目錄的sqlite文件中將舊數據恢復到捆綁中的新數據?我使用代碼數據遷移(涉及數據模型中的版本號),當我更新數據模型時,它可以正常工作。

+0

是要複製靜態數據的數據嗎?或者用戶會改變它? – Mundi 2015-02-12 21:20:20

+0

請注意,包中的文件是隻讀的。 – 2015-02-13 01:22:31

回答

0

Apple建議使用兩個持久性存儲(在同一模型中)來分隔用戶生成的數據和靜態數據。據推測,如果你的數據是靜態的,你應該做到這一點,並有一個靜態數據的只讀存儲。請參閱核心數據編程指南中的Configurations

另一種方法是

  1. 到包種子數據庫複製到文檔目錄,然後
  2. 從老店讀取數據,並
  3. 將其複製到新的一個。
  4. 最後,您可以刪除舊的商店。
+0

是的,我的數據是靜態的。只讀。 – frigocat 2015-02-14 06:37:51

+0

我一直在考慮從舊商店讀取數據並複製到新問題中。這正是我發佈的問題。 我的問題:我該怎麼做?我如何「從舊商店讀取數據並將其複製到新商店」? – frigocat 2015-02-14 06:40:06

+0

只需從舊商店獲取所有內容,循環查看結果,將具有相同數據的新實體插入新商店。 – Mundi 2015-02-14 07:02:35

相關問題