在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")}
但是,向MycastController的向下转换始终失败,并且未注册撤消 *** 作.
我错过了一些明显的东西,或者这是一个错误?
prepareWithInvocationTarget(_:)(或在Swift 3中准备(withInvocationTarget :))创建一个隐藏的代理对象,Swift 3运行时无法正常工作.(您可以将其称为错误,并发送错误报告.)
为了达到你的目的,你不能使用registerUndo(withTarget:handler :)吗?
undoManager?.registerUndo(withTarget: self) {targetSelf in targetSelf.undo(data,moreData: moreData)}总结
以上是内存溢出为你收集整理的macos – 在Swift 3中使用NSUndoManager和.prepare(withInvocationTarget :)全部内容,希望文章能够帮你解决macos – 在Swift 3中使用NSUndoManager和.prepare(withInvocationTarget :)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)