Je migre un projet Mac OS X Xcode 7/Swift 2.2 vers Xcode 8/Swift 3, et j'ai rencontré un problème en utilisant undoManager dans ma classe de contrôleur de vue, MyViewController, qui a une fonction Annuler.Utilisation de NSUndoManager et .prepare (withInvocationTarget :) dans Swift 3
Dans Xcode 7/Swift 2.2, cela a fonctionné très bien:
undoManager?.prepareWithInvocationTarget(self).undo(data, moreData: moreData)
undoManager?.setActionName("Change Data)
Dans Xcode 8/Swift 3, en utilisant le modèle recommandé de https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html
cela devrait être changé:
if let target = undoManager?.prepare(withInvocationTarget: self) as? MyViewController {
target.undo(data, moreData: moreData)
undoManager?. setActionName("Change Data")
}
Cependant, le basculement vers MyViewController échoue toujours et l'opération d'annulation n'est pas enregistrée.
Ai-je manqué quelque chose d'évident ici, ou est-ce un bug?
Merci. J'ai joué avec ça aussi. Malheureusement, il n'est pas compatible avec OS10.10, mais il est peut-être temps de passer à autre chose. – jbaraga
Solution pour OS 10.10: utiliser 'registerUndo (avec Target: selector: object:)'. Pas de problème pour sauvegarder une seule valeur. Pour sauvegarder plusieurs valeurs, je les empaquette dans un dictionnaire et je l'utilise pour le paramètre "objet". Pour l'opération d'annulation, je les décompresse du dictionnaire. – jbaraga
@jbaraga, merci pour les rapports. Mais pourquoi ne pas l'afficher comme une autre réponse? Cela peut être utile pour les développeurs qui ont besoin de travailler avec 10.10. – OOPer