-->

how do i remove coredata from iphone

2019-05-06 20:03发布

问题:

You know how you can Reset the coredata store on an iPhone simulator when you've changed your entity structure?

Do I need to perform a similar process when I've created a new version of my core data store that is different from what I last ran on my iPhone? If so, how, please?

Thanks

回答1:

Just for convenience, until you code a way to remove the persistent store through your app, you can just delete the app off the phone. (Hold your finger on the home screen until icons get wiggly, then click the x on your app.) Then with your phone connected to your Mac, choose Product > Run in XCode and it will reinstall your app on the phone, but with empty data directories.

For deployment, of course, you need to come up with a way to do it without deleting the app, if you will ever change your data model after deployment (assume you will). Data migration is the best option, but if all else fails delete the persistent store file. It would be preferable to prompt for the user's approval before doing that. If they have important data they can decline and maybe get the old version of your app back to view the data and migrate it by hand, or they can wait until you release version 2.0.1 that fixes your data migration bug.



回答2:

Here is the routine I use to reset my App content. It erases the store and any other file stored.

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

If you only want to erase the store, since you know its file name, you can refrain from enumerating the document directory content:

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

But please note that in many cases, its better to migrate your store when you change your model, rather than to delete it.



回答3:

locate your app in /Users/username/Library/Application Support/iPhone Simulator/4.3.2 (iOS Version may be different) and delete the .sqlite file



回答4:

You can look at the path that is being sent to the persistentStoreCoordinator on setup, and remove that file. Usually the approach I have taken is that I set up the store to auto migrate, and if that fails I delete the store and attempt one more time to create the persistentStoreCoordinator which will use the now empty path.

Don't forget you may need to repopulate anything stored in the old database.