【问题标题】:how do i remove coredata from iphone如何从 iphone 中删除 coredata
【发布时间】:2011-11-14 03:02:55
【问题描述】:

您知道在更改实体结构后如何在 iPhone 模拟器上重置 coredata 存储吗?

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

谢谢

【问题讨论】:

    标签: iphone ios core-data core-data-migration


    【解决方案1】:

    为了方便起见,除非您编写了一种通过您的应用删除永久存储的方法,否则您只需从手机上删除该应用即可。 (将手指放在主屏幕上,直到图标摆动,然后单击应用程序上的 x。)然后将手机连接到 Mac,选择 Product > Run in XCode,它将在手机上重新安装您的应用程序,但为空数据目录。

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

    【讨论】:

    • 感谢晨星!我现在尝试了你的第一个选项。当它警告我我的数据存储也将被删除时,我喜欢它。只是想要我想要的。
    【解决方案2】:

    这是我用来重置我的应用内容的例程。它会删除存储存储的任何其他文件。

    - (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];
    }
    

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

    【讨论】:

    • 但请记住也要删除“myStore.sqlite-shm”和“myStore.sqlite-wal”日志文件(在 iOS 7 及更高版本中为日志模式创建),因为它们占用了大部分空间,删除 Store 后它们就没用了。
    【解决方案3】:

    /Users/username/Library/Application Support/iPhone Simulator/4.3.2(iOS版本可能不同)中找到您的应用并删除.sqlite文件

    【讨论】:

    • 嘿 iPortable,看起来你提供了模拟器的路径。我正在寻找删除手机上的数据存储区。不过还是谢谢。
    • 哎呀抱歉误解了这个问题。在第一部分中,您要求使用模拟器,所以我认为您的意思是模拟器数据库。对不起。
    【解决方案4】:

    您可以在设置时查看发送到 persistentStoreCoordinator 的路径,然后删除该文件。通常我采取的方法是将商店设置为自动迁移,如果失败,我会删除商店并再次尝试创建将使用现在为空路径的 persistentStoreCoordinator。

    不要忘记您可能需要重新填充存储在旧数据库中的任何内容。

    【讨论】:

    • 嗨 Kendall:你能告诉我:1. 如何设置商店以自动迁移 2. 除了上面 chown 提供的方法之外,我如何从手机上删除商店?
    • 只需使用 NSFileManager 删除文件。您可以在 Google 上搜索很多关于如何让商店自动迁移的示例。
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2014-11-20
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多