Qu'est-ce qui appelle -cancel? J'ai rencontré des situations où une autre méthode enregistrait un événement d'annulation (et les données de base peuvent le faire "utilement" pour vous). Vous pouvez constater que votre pile d'annulation est vide à la fin de -cancel mais obtient un événement ajouté par la méthode d'appel. Dans ces cas, choisir "Annuler" ne fait rien, l'événement n'a rien à annuler. Pour éviter ces événements superflus, vous devez désactiver l'annulation de l'enregistrement (puis le réactiver) dans la méthode d'appel. Quelque chose le long des lignes de ...
- (void)doSomething {
// Disable undo until we definitely want to undo stuff
[managedObjectContext.undoManager disableUndoRegistration];
// Stuff goes here
if (userCancelled) {
[self cancel];
[managedObjectContext.undoManager enableUndoRegistration];
return;
}
// We actually want user to be able to undo the following stuff
[managedObjectContext.undoManager enableUndoRegistration];
// More stuff goes here
}
Avant de plonger trop loin dans ce faire quelques vérifications NSLog simple pour voir ce qui est sur la pile undo quand (et pour vous assurer que vous envoyez des messages à un réel NSUndoManager en direct plutôt qu'un objet nul).
1. Un bouton déclenche -cancel. 2. Comment puis-je savoir si la pile d'annulation est vide sauf pour essayer de faire une annulation? Cette information est encapsulée, donc je ne peux pas me connecter. 3. Mon "Annuler" déclenche une action qui annule ma suppression. 4. gestionnaire d'annulation de zéro? Oh non, bien sûr. Mais merci pour le rappel. – an0