Xcode: Mettre à jour des données CoreData lors d’une mise à jour

mardi 16 juillet 2013

Il peut être utile de mettre à jour / créer ou détruire des données lors d’une mise à jour d’une application. Je vais vous donner un exemple de mise à jour de données d’une entité dans CoreData et ce qu’une seule fois lors de la mise à jour de l’application.

Voici le code que j’ai ajouter dans l’event didFinishLaunchingWithOptions dans Appdelegate

    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"DidFixImagePathForPreviousVersions1"])
    {
        NSManagedObjectContext *context = [self managedObjectContext];
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        [request setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context]];
        NSError *error = nil;
        NSArray *results = [context executeFetchRequest:request error:&error];
        for(Entity *entity in results)
        {
                // ON modifie objet Entity et on sauve
                if (![context save:&error]) {
//                    NSLog(@"Can't Update record! %@ %@", error, [error localizedDescription]);
                    return;
                }
            }
        }
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidFixImagePathForPreviousVersions1"];
    }

Dans cet exemple, j’utilise [NSUserDefaults standardDefaults] qui est utile pour savoir si on a déjà fait les changements dans CoreData. Cela évite de le faire à chaque fois. Ces valeurs de NSUserDefaults persistent entre chaque lancement (et chaque mise à jour) de ton application. Elle ne sera détruite que lors de sa désinstallation.

Tags: CoreData , didFinishLaunchingWithOptions , Mise à jour