2016-04-19 59 views
5

我試圖coreData遷移到新版本,我在下面的這一步:如何簡單地刪除舊的核心數據並重建新的數據?

在進行任何更改之前添加一個新的模型版本(選擇name.xcdatamodeld然後編輯 - >添加 示範文本),如果你有一個應用程序已經提交到正在使用早期模型版本的App Store 。

然後,從核心數據選項卡添加一個新的文件,如映射模型的選擇, 源模型(示範文本將提交的應用程序使用) 目的地型號(Model版本中,你所做的更改)

source

但我的數據主要是圖像和應用程序崩潰,因爲它需要大量的內存。所以我想刪除舊的數據模型及其數據,並在用戶更新應用時創建空的新模型數據。這個怎麼做?

回答

3

如果數據模型發生變化,您可以簡單地檢查數據庫文件的模型。如果它不是新的,則使用NSFileManager刪除StoreCoordinator中指定的文件,並再次初始化StoreCoordinater和NSManagedContext以創建一個新文件。

類似的東西(未測試的代碼):

var error: NSError 
var applicationDocumentsDirectory: NSURL = NSFileManager.defaultManager().URLsForDirectory(NSDocumentDirectory, inDomains:NSUserDomainMask).lastObject 
let storeURL: NSURL = applicationDocumentsDirectory.URLByAppendingPathComponent("Database.sqlite") 
NSFileManager.defaultManager().removeItemAtPath(storeURL.path, error) 

如果模型沒有改變,你需要在任何地方保存更新的信息。文本文件,位於數據庫本身或UserDefaults中。您只需要一個標誌來檢查數據庫是否已更新/清理。

然後,您也可以像上面那樣刪除數據庫,或者獲取所有對象並刪除它們。

+0

每當用戶打開應用程序時,它會重建核心數據嗎? –

+1

@AldoLazuardi當你想要一個新的數據庫時,取決於你。一種選擇是創建一個文本文件,在其中保存數據庫的版本。如果版本太舊並且需要重建,則刪除存儲文件並重新創建一個空的文件。 – Binarian

+0

刪除-shm和-wal文件以及相關的Store文件 –

相關問題