Я пытаюсь реализовать отмену/повтор в своей модели. Поэтому я сделал свой класс модели подклассом NSResponder
, а затем реализовал следующее:
примечание: этот код отредактирован на основе дополнительных исследований после комментариев.
func setAnnotations(_ newAnnotations: [Annotation]) {
let currentAnnotations = self.annotations
self.undoManager.registerUndo(withTarget: self, handler: { (selfTarget) in
selfTarget.setAnnotations(currentAnnotations)
})
self.annotations = newAnnotations
}
Annotation
- это структура.
Код внутри замыкания никогда не выполняется. Сначала я заметил, что undoManager
это nil
, но потом нашел этот фрагмент:
private let _undoManager = UndoManager()
override var undoManager: UndoManager {
return _undoManager
}
Теперь undoManager
больше не равно нулю, но код внутри замыкания по-прежнему не выполняется.
Что мне здесь не хватает?
print
. Что касается того, что ничего не было отменено, я не удивлен, так как ваш код вообще не имеет смысла. У вас есть параметрnewAnnotations
, который никогда не используется. Строкаself.annotations = annotations
безумна, потому что единственнаяannotations
в поле зрения - этоself.annotations
, так что вы просто устанавливаетеself.annotations
на себя. - person matt   schedule 10.05.2019NSResponder
. - person koen   schedule 10.05.2019NSResponder
, в цепочке респондента? - person Willeke   schedule 10.05.2019