2011-09-09 36 views
4

您知道如何在更改實體結構時重置iPhone仿真器上的coredata存儲?如何從iphone中刪除coredata

當我創建與上次在我的iPhone上運行的核心數據存儲區不同的新版核心數據存儲區時,是否需要執行類似的過程?如果是這樣,請怎麼辦?

感謝

回答

9

只是爲了方便起見,在您編寫通過應用程序刪除持久存儲區的方法之前,您只需將應用程序從手機中刪除即可。 (將手指放在主屏幕上,直到圖標變形,然後單擊應用程序上的x)。然後,將手機連接到Mac,選擇產品>在XCode中運行,然後在手機上重新安裝應用程序,但空數據目錄。

對於部署,當然,如果在部署之後(假設您將會)在更改數據模型時您需要在不刪除應用程序的情況下創建一個方法。數據遷移是最好的選擇,但如果所有其他操作都無法刪除持久性存儲文件。這樣做最好在做之前提示用戶的批准。如果他們有重要的數據,他們可能會拒絕,並可能讓舊版本的應用程序回到查看數據並手動遷移數據,或者他們可以等到您發佈修復數據遷移錯誤的2.0.1版本。

+0

謝謝morningstar!我現在嘗試了你的第一個選擇。當它告誡我我的數據存儲也會被刪除時,我就會愛上它。只是想我想要的。 – Jazzmine

1

定位/Users/username/Library/Application Support/iPhone Simulator/4.3.2您的應用(iOS版本可能不同),並刪除.sqlite文件

+0

嗨iPortable,它看起來像你提供了模擬器的路徑。我正在刪除手機上的數據存儲。不過謝謝。 – Jazzmine

+1

抱歉抱歉誤解了這個問題。在你要求的模擬器的第一部分,所以我認爲你的意思是模擬器數據庫。抱歉。 – 2011-09-09 22:03:20

+0

沒問題,謝謝提供幫助。 – Jazzmine

0

你可以看一下正在發送到persistentStoreCoordinator上設置的路徑,並刪除文件。通常,我採用的方法是將商店設置爲自動遷移,如果失敗,則刪除商店並嘗試再次創建將使用現在爲空的路徑的persistentStoreCoordinator。

不要忘記你可能需要重新填充存儲在舊數據庫中的任何東西。

+0

嗨肯德爾:你能告訴我:1.如何設置商店自動遷移2.我如何刪除我的手機除了如何chown上面提供的商店? – Jazzmine

+0

只需使用NSFileManager刪除文件。您可以通過谷歌搜索大量關於如何讓商店自動遷移的示例。 –

6

這是我用來重置我的應用內容的例程。它刪除存儲存儲的任何其他文件。

- (void) resetContent 
{ 
    NSFileManager *localFileManager = [[NSFileManager alloc] init]; 
    NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES]; 

    NSArray *content = [localFileManager contentsOfDirectoryAtURL:rootURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsSubdirectoryDescendants error:NULL]; 

    for (NSURL *itemURL in content) { 
     [localFileManager removeItemAtURL:itemURL error:NULL];  
    } 

    [localFileManager release]; 
} 

如果你只是想刪除的商店,因爲你知道它的文件名,你可以從枚舉文件目錄內容副歌:

- (void) resetContent 
{ 
    NSFileManager *localFileManager = [[NSFileManager alloc] init]; 
    NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES]; 

    NSURL *storeURL = [rootURL URLByAppendingPathComponent:@"myStore.sqlite"]; 
    [localFileManager removeItemAtURL:storeURL error:NULL];  

    [localFileManager release]; 
} 

但請注意,在許多情況下,它的更好在您更改模型時遷移商店,而不是刪除它。

+0

但記得刪除「myStore.sqlite-shm」和「myStore.sqlite-wal」日誌文件(在iOS 7及更高版本中創建日誌模式),因爲它們佔用了大部分空間,並且在刪除Store之後他們沒用。 –