63 votes

Comment mettre à jour un objet existant dans la Base de Données?

Quand j'ai insérer un nouvel objet-je faire avec le code suivant:

NSManagedObjectContext *context = [appDelegate managedObjectContext];

Favorits *favorits = [NSEntityDescription insertNewObjectForEntityForName:@"Favorits" inManagedObjectContext:context];

favorits.title = @"Some title";

NSError *error;                    
if (![context save:&error]) {
    NSLog(@"Whoops");
}

Comment puis-je mettre à jour un objet existant dans la base de données?

135voto

flexaddicted Points 16208

La mise à jour est simple que de créer un nouveau.

Pour mettre à jour un objet spécifique, vous devez configurer un NSFetchRequest. Cette classe est équivalente à une sélection statetement en langage SQL.

Voici un exemple simple:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code

Le tableau results contient tous les objets contenus dans le fichier sqlite. Si vous voulez prendre un objet spécifique (ou plusieurs objets de), vous devez utiliser un prédicat à cette demande. Par exemple:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"];
[request setPredicate:predicate]; 

Dans ce cas - results contient les objets où le titre est égal à Some Title. Définition d'un prédicat est égal à mettre la clause where d'une instruction SQL.

Pour plus d'informations, je vous suggère de lire la Base de Données guide de programmation et d' NSFecthRequest classe de référence.

Espérons que cela aide.

EDIT (extrait de code qui peut être utilisé pour mettre à jour)

// maybe some check before, to be sure results is not empty
Favorits* favoritsGrabbed = [results objectAtIndex:0];    
favoritsGrabbed.title = @"My Title";

// save here the context

ou si vous n'êtes pas à l'aide d'un NSManagedObject sous-classe.

// maybe some check before, to be sure results is not empty
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"My title" forKey:@"title"];

// save here the context

Dans les deux cas, si vous faites un save sur le contexte, les données seront mises à jour.

11voto

shawnwall Points 3127

Vous devez chercher l'objet à partir du contexte, de modifier les propriétés que vous désirez, puis enregistrez le contexte que vous êtes dans votre exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X