- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 Xcode 7/Swift 2.2 mac OS X 项目迁移到 Xcode 8/Swift 3,并且在我的 View Controller 类 MyViewController 中使用 undoManager 时遇到了问题,该类具有撤消功能。
在 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 总是失败,并且未注册撤消操作。
我在这里遗漏了一些明显的东西,还是这是一个错误?
最佳答案
prepareWithInitationTarget(_:)
(或 Swift 3 中的 prepare(withInitationTarget:)
)会创建一个隐藏的代理对象,Swift 3 运行时无法正常使用该代理对象。
(您可以将其称为错误,并发送错误报告。)
为了达到你的目的,你不能使用registerUndo(withTarget:handler:)
吗?
undoManager?.registerUndo(withTarget: self) {targetSelf in
targetSelf.undo(data, moreData: moreData)
}
关于macos - 使用 NSUndoManager 和 .prepare(withInitationTarget :) in Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562636/
我正在将 Xcode 7/Swift 2.2 mac OS X 项目迁移到 Xcode 8/Swift 3,并且在我的 View Controller 类 MyViewController 中使用 u
我是一名优秀的程序员,十分优秀!