我如何从iphone中删除coredata

Jaz*_*ine 4 iphone core-data core-data-migration ios

您知道如何在更改实体结构时重置iPhone模拟器上的coredata商店吗?

当我创建的核心数据存储的新版本与我上次在iPhone上运行的版本不同时,是否需要执行类似的过程?如果是的话,请问怎么样?

谢谢

mor*_*tar 9

为方便起见,在您编写通过应用程序删除持久存储的方法之前,您可以通过电话删除该应用程序.(将手指放在主屏幕上,直到图标变得晃动,然后单击应用上的x.)然后将手机连接到Mac,选择"产品">"在XCode中运行",它将在手机上重新安装您的应用,但为空数据目录.

当然,对于部署,如果您在部署后更改数据模型(假设您愿意),则需要在不删除应用程序的情况下提出一种方法.数据迁移是最佳选择,但如果所有其他方法都失败,则删除持久性存储文件.在这之前最好提示用户批准.如果他们有重要的数据,他们可能会拒绝并可能会返回旧版本的应用程序以查看数据并手动迁移,或者他们可以等到您发布修复数据迁移错误的2.0.1版本.


Jea*_*uys 6

这是我用来重置我的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];
}
Run Code Online (Sandbox Code Playgroud)

如果您只想删除商店,因为您知道它的文件名,您可以避免枚举文档目录内容:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

但请注意,在许多情况下,更改模型时更好地迁移商店,而不是删除它.