我无法让NSUndoManager在Swift Xcode版本6.1 GM Seed 2中运行。我已多次阅读文章How do I register NSUndoManager in Swift?,但我无法在6.1中使用它。
以下是显示我的尝试的代码段:
func zoomFractalClick(imagePoint: NSPoint?) {
//NSLog("Point zoomed \(imagePoint)")
if imagePoint == nil { return }
let tag = zoomPopUp.selectedItem!.tag
// Try setting undo/redo
undoManager.registerUndoWithTarget(self, selector: Selector("resetFractalDef"),
object: StructWrapper<MJFractalDefinition>(object: fractalDef))
//(undoManager.prepareWithInvocationTarget(self) as AppDelegate).
// resetFractalDef(StructWrapper<MJFractalDefinition>(object: fractalDef))
fractalDef.zoomBounds(centerPoint: imagePoint!, zoomPower: Double(tag))
drawFractal()
}
func resetFractalDef( fractalDef: StructWrapper<MJFractalDefinition>) {
self.fractalDef = fractalDef.object
drawFractal()
}
class StructWrapper<T> {
let object: T
init( object: T) {
self.object = object
}
}
使用'简单'方法,即使保存撤消,一切都可以正确编译和运行。但是,当我从编辑菜单中选择撤消时,我收到错误,它无法找到选择器'resetFractalDef'。
我还尝试使用Undo的调用方法进行准备,并且在尝试使用调用目标报告'EXC_BREAKPOINT'来准备撤消时失败。
请,任何帮助将不胜感激。我是一名Java程序员,学习在Apple环境中编程,主要是喜欢使用Swift。