Я переношу проект Xcode 7/Swift 2.2 mac OS X в Xcode 8/Swift 3, и у меня возникла проблема с использованием undoManager в моем классе контроллера представления, MyViewController, который имеет функцию отмены.
В Xcode 7/Swift 2.2 это работало нормально:
undoManager?.prepareWithInvocationTarget(self).undo(data, moreData: moreData)
undoManager?.setActionName("Change Data)
В Xcode 8/Swift 3 с использованием рекомендуемого шаблона из https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html
это должно быть изменено на:
if let target = undoManager?.prepare(withInvocationTarget: self) as? MyViewController {
target.undo(data, moreData: moreData)
undoManager?. setActionName("Change Data")
}
Однако приведение вниз к MyViewController всегда терпит неудачу, и операция отмены не регистрируется.
Я пропустил что-то очевидное здесь, или это ошибка?