[英]how do i remove coredata from iphone
您知道如何在更改實體結構時重置iPhone模擬器上的coredata商店嗎?
當我創建的核心數據存儲的新版本與我上次在iPhone上運行的版本不同時,是否需要執行類似的過程? 如果是的話,請問怎么樣?
謝謝
為方便起見,在您編寫通過應用程序刪除持久存儲的方法之前,您可以通過電話刪除該應用程序。 (將手指放在主屏幕上,直到圖標變得晃動,然后單擊應用上的x。)然后將手機連接到Mac,選擇“產品”>“在XCode中運行”,它將在手機上重新安裝您的應用,但為空數據目錄。
當然,對於部署,如果您在部署后更改數據模型(假設您願意),則需要在不刪除應用程序的情況下提出一種方法。 數據遷移是最佳選擇,但如果所有其他方法都失敗,則刪除持久性存儲文件。 在這之前最好提示用戶批准。 如果他們有重要的數據,他們可能會拒絕並可能會返回舊版本的應用程序以查看數據並手動遷移,或者他們可以等到您發布修復數據遷移錯誤的2.0.1版本。
這是我用來重置我的App內容的例程。 它會刪除存儲和存儲的任何其他文件。
- (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];
}
但請注意,在許多情況下,更改模型時更好地遷移商店,而不是刪除它。
在/Users/username/Library/Application Support/iPhone Simulator/4.3.2
(iOS版本可能不同)中找到您的應用程序並刪除.sqlite
文件
您可以查看在安裝時發送到persistentStoreCoordinator的路徑,並刪除該文件。 通常我采用的方法是將存儲設置為自動遷移,如果失敗,我會刪除存儲並再次嘗試創建將使用現在為空的路徑的persistentStoreCoordinator。
不要忘記您可能需要重新填充存儲在舊數據庫中的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.