J'essaye de créer une application iPhone où l'utilisateur peut ajouter des entrées. Quand il appuie sur une nouvelle entrée, une boîte apparaîtra lui demandant des informations. Ensuite, il peut appuyer sur "Annuler" ou "Enregistrer" pour supprimer les données ou les enregistrer sur le disque. Pour sauvegarder, j'utilise le framework Core Data, qui fonctionne plutôt bien. Cependant, je ne peux pas obtenir le bouton "Annuler" pour fonctionner. Lorsque la fenêtre apparaît, demandant des informations, je crée un nouvel objet dans le contexte d'objet géré (MOC). Ensuite, lorsque l'utilisateur appuie sur annuler, j'essaie d'utiliser le NSUndoManager appartenant au MOC.NSUndoManager Annuler ne fonctionne pas avec les données de base
Je voudrais également le faire en utilisant des groupes d'annulation imbriqués, car il pourrait y avoir des groupes imbriqués.
Pour tester cela, j'ai écrit une application simple. L'application est simplement le modèle "Application basée sur la fenêtre" avec les données de base activées. Pour le modèle Core Data, je crée une entité unique appelée "Entity" avec l'attribut entier "x". Puis à l'intérieur du applicationDidFinishLaunching, ajouter ce code:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
unsigned int x=arc4random()%1000;
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager beginUndoGrouping];
NSManagedObject *entity=[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
inManagedObjectContext:self.managedObjectContext];
[entity setValue:[NSNumber numberWithInt:x] forKey:@"x"];
NSLog(@"Insert Value %d",x);
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager endUndoGrouping];
[self.managedObjectContext.undoManager undoNestedGroup];
NSFetchRequest *fetchRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *entityEntity=[NSEntityDescription entityForName:@"Entity"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityEntity];
NSArray *result=[self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
for(entity in result) {
NSLog(@"FETCHED ENTITY %d",[[entity valueForKey:@"x"] intValue]);
}
[window makeKeyAndVisible];
}
L'idée est simple. Essayez d'insérer un nouvel objet Entity, annulez-le, récupérez tous les objets Entity dans le MOC et imprimez-les. Si tout fonctionnait correctement, il ne devrait pas y avoir d'objets à la fin.
Cependant, je reçois cette sortie:
[Session started at 2010-02-20 13:41:49 -0800.]
2010-02-20 13:41:51.695 Untitledundotes[7373:20b] Insert Value 136
2010-02-20 13:41:51.715 Untitledundotes[7373:20b] FETCHED ENTITY 136
Comme vous pouvez le voir, l'objet est présent dans le MOC après que j'essaie de défaire sa création. Des suggestions sur ce que je fais mal?
Salut Im ayant le même problème. Avez-vous trouvé une solution? Avez-vous essayé d'utiliser "undo" au lieu de "undoNestedGroup"? Merci gonso – gonso