2011-03-17 60 views
1

好的,我希望你能幫助我。我真的需要你的幫助。用新結構數據庫覆蓋Coredata數據庫

我對應用商店,它使用種子數據庫的應用程序(檢查分貝在應用程序代理的「persistentStoreCoordinator」方法存在如果不存在,複製種子DB)。

的問題是,我改變DB結構,當然種子分貝結構爲好。並將更新發布到應用商店。當用戶更新應用程序並打開它時,應用程序崩潰。因爲檢查文檔文件夾中是否存在數據庫的代碼可以找到該數據庫,因此它將使用需要新數據庫結構的應用程序中的舊數據庫。

我不知道我可以克服這個問題。問題是我不能只是替換現有的數據庫,因爲那樣我就無法複製種子數據庫。

請幫我:)

回答

2

你爲什麼改變了DB結構,而不是數據模型?核心數據不是數據庫。它旨在將數據庫抽象出來,因此您不必考慮它。如果你需要直接操作數據庫,你應該使用SQLite。

核心數據提供自動和手動兩種模式的遷移,讓你改變你的數據模型和具有核心數據採取DB的照顧。嚴重的是,核心數據的整個重點是你永遠不必直接處理數據庫。

+0

感謝你的解釋我知道了。我將嘗試研究Greg C給我的遷移指南。我會盡力找到更好的解決方案。 – 2011-03-18 04:00:50

+1

+1熟練使用SQL和類似DB的人通常認爲Core Data只是SQL的對象封裝,通常會讓人感到悲傷。這不是,你學習SQL的絕大多數技巧和技巧不僅在使用核心數據時是無用的,而且是非常危險的。 – TechZen 2011-03-18 15:52:27

0

好吧,我設法通過檢查應用程序打開的第一時間解決問題。如果它是真的,那麼我會刪除舊的數據庫,然後把種子數據庫(與新模型)。

我用這個代碼:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firsttimer"]) { 
    if ([fileManager fileExistsAtPath:storePath]) { 
     [fileManager removeItemAtPath:storePath error:nil]; 
    } 
    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"firsttimer"]; 
} 
+0

你應該編輯你的問題,而不是發佈這樣的答案。 – 2011-03-18 17:46:29