J'ajoute une instance dans les données de base. L'entité est représentée par un NSArrayController
. Je voudrais accéder à l'instance nouvellement ajoutée via le contrôleur.Données de base: comment mettre à jour un NSArrayController immédiatement après l'ajout d'un objet NSManagedObject?
Une « compétence » par exemple est ajouté, puis je tente d'y accéder par selectAddedObject
comme suit:
-(void)addSkill
{
[self selectAddedObject:[NSEntityDescription insertNewObjectForEntityForName:@"Skill"
inManagedObjectContext:self.managedObjectContext]];
}
- (void)selectAddedObject:(NSManagedObject *)addedMO
{
[self.sectionArrayController setSelectedObjects:[NSArray arrayWithObject:addedMO]];
NSLog(@"Selected: %@", [self.sectionArrayController valueForKey:@"selectedObjects"]);
}
Cela semble ne fonctionner que si j'ajoute
[self.managedObjectContext processPendingChanges];
comme la première ligne de selectAddedObject:
. Mais une fois que je fais cela, le document semble oublier qu'il doit encore enregistrer, et je pourrais quitter l'application sans que mon ajout soit automatiquement enregistré. Je ne veux pas forcer ça aux utilisateurs!
Des idées sur un moyen de mettre immédiatement à jour le contrôleur RAID d'une autre manière? Ou peut-être ajouter l'objet d'une autre manière? Quelques réponses antérieures (par exemple Updating NSTableView when enitiy is added to core data) semblent un peu obsolètes en raison des changements dans OSX.
Merci!
Merci, il semble très élégant de cette façon. J'ai un problème après avoir essayé cette solution: 'self.sectionArrayController' a toujours un nombre inchangé d'objets après la validation! Mais la valeur renvoyée est "OUI". Hmmm .... – markjs
L'utilisation de 'add:' sur le contrôleur RAID (dans IB) ne sélectionne pas non plus le nouvel objet, pas même avec "Sélectionner les objets insérés" coché dans le constructeur de l'interface. – markjs
Ce qui fonctionne, c'est d'ajouter '[self.managedObjectContext processPendingChanges];'. Je voudrais vraiment faire sans. Y a-t-il une raison pour que '-commitEditing' ne fonctionne pas, et que '-processPendingChanges' le fasse? – markjs