Comment mettre à jour un object existant dans Core Data?

Lorsque j’insère un nouvel object, je le fais 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 object existant dans les données de base?

La mise à jour est simple en créant un nouveau.

Pour mettre à jour un object spécifique, vous devez configurer un NSFetchRequest . Cette classe est équivalente à un état SELECT 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 

Les results tableau contiennent tous les objects gérés contenus dans le fichier sqlite. Si vous souhaitez saisir un object spécifique (ou plusieurs objects), vous devez utiliser un prédicat avec cette requête. Par exemple:

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

Dans ce cas, les results contiennent les objects où title est égal à Some Title . Définir un prédicat est égal à mettre la clause WHERE dans une instruction SQL.

Pour plus d’informations, je vous suggère de lire le guide de programmation Core Data et la référence de classe NSFecthRequest .

  • Guide de programmation de données de base

  • Référence de la classe NSFecthRequest

J’espère que cela aide.

EDIT (extrait de code pouvant ê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’utilisez pas une sous-classe NSManagedObject .

 // 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 effectuez une save sur le contexte, les données seront mises à jour.

Vous devez extraire l’object du contexte, modifier les propriétés souhaitées, puis enregistrer le contexte comme vous le faites dans votre exemple.

J’espère que cela vous aidera. comme ça marche pour moi.

  NSMutableArray *results = [[NSMutableArray alloc]init]; int flag=0; NSPredicate *pred; if (self.txtCourseNo.text.length > 0) { pred = [NSPredicate predicateWithFormat:@"courseno CONTAINS[cd] %@", self.txtCourseNo.text]; flag=1; } else { flag=0; NSLog(@"Enter Corect Course number"); } if (flag == 1) { NSLog(@"predicate: %@",pred); NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Course"]; [fetchRequest setPredicate:pred]; results = [[self.context executeFetchRequest:fetchRequest error:nil] mutableCopy]; if (results.count > 0) { NSManagedObject* favoritsGrabbed = [results objectAtIndex:0]; [favoritsGrabbed setValue:self.txtCourseName.text forKey:@"coursename"]; [self.context save:nil]; [self showData]; } else { NSLog(@"Enter Corect Course number"); } } 

Si vous êtes un programmeur rapide, cela peut vous aider:

si vous voulez supprimer un NSManagedObject

dans mon cas, l’ID est un atsortingbut unique pour l’entité STUDENT

 /** for deleting items */ func Delete(identifier: Ssortingng) { let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext let fetchRequest:NSFetchRequest = NSFetchRequest.init(entityName: "STUDENT") let predicate = NSPredicate(format: "ID = '\(identifier)'") fetchRequest.predicate = predicate do { let object = try context.fetch(fetchRequest) if object.count == 1 { let objectDelete = object.first as! NSManagedObject context.delete(objectDelete) } } catch { print(error) } } 

si vous souhaitez mettre à jour un NSManagedObject:

 /** for updating items */ func Update(identifier: Ssortingng,name:Ssortingng) { let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext let fetchRequest:NSFetchRequest = NSFetchRequest.init(entityName: "STUDENT") let predicate = NSPredicate(format: "ID = '\(identifier)'") fetchRequest.predicate = predicate do { let object = try context.fetch(fetchRequest) if object.count == 1 { let objectUpdate = object.first as! NSManagedObject objectUpdate.setValue(name, forKey: "name") do{ try context.save() } catch { print(error) } } } catch { print(error) } }