gpt4 book ai didi

macos - 使用 NSUndoManager 和 .prepare(withInitationTarget :) in Swift 3

转载 作者:行者123 更新时间:2023-12-02 20:11:55 24 4
gpt4 key购买 nike

我正在将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com