macos – 在Swift 3中使用NSUndoManager和.prepare(withInvocationTarget :)

macos – 在Swift 3中使用NSUndoManager和.prepare(withInvocationTarget :),第1张

概述我正在将 Xcode 7 / Swift 2.2 mac OS X项目迁移到Xcode 8 / Swift 3,我在我的视图控制器类MyViewController中使用undoManager遇到了一个问题,它有一个函数undo. 在Xcode 7 / Swift 2.2中,这很好用: undoManager?.prepareWithInvocationTarget(self).undo(data 我正在将 Xcode 7 / Swift 2.2 mac OS X项目迁移到Xcode 8 / Swift 3,我在我的视图控制器类MyVIEwController中使用undoManager遇到了一个问题,它有一个函数undo.

在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 :)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1029419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存