gpt4 book ai didi

swift - NSDocument选项卡窗口恢复

转载 作者:行者123 更新时间:2023-11-30 10:26:16 30 4
gpt4 key购买 nike

此问题涉及基于文档的应用程序中的选项卡窗口恢复。

在 OSX、基于文档的应用程序中,允许用户创建和转换选项卡窗口,我需要保留和恢复每个窗口的“选项卡”状态。

目前,我的文档 Controller 恢复其文档窗口,但不恢复选项卡部署;我取回单独的窗口;我可以将所有内容合并为一个,但这太严厉了,因为它们以前的分组都丢失了。

我的应用程序文档类的 - makeWindowControllers() 函数是我影响新 Controller 的地方,它们是否应该级联,我在恢复期间读到的是错误的:

//  Determine cascade based on state of application delegate
controller.shouldCascadeWindows = <app did receive applicationWillFinishLaunching>

因此在完成启动之前它会是错误的。

最后,我的窗口的类具有方法:

override func addTabbedWindow(_ window: NSWindow, ordered: NSWindow.OrderingMode) {
super.addTabbedWindow(window, ordered: ordered)
window.invalidateRestorableState()
}
override func moveTabToNewWindow(_ sender: Any?) {
super.moveTabToNewWindow(sender)
self.invalidateRestorableState()
}

override func encodeRestorableState(with coder: NSCoder) {
if let tabGroup = self.tabGroup {
let tabIndex = tabGroup.windows.firstIndex(of: self)
coder.encode(tabIndex, forKey: "tabIndex" )
Swift.print("<- tabIndex: \(String(describing: tabIndex))")
}
}

override func restoreState(with coder: NSCoder) {
let tabIndex = coder.decodeInt64(forKey: "tabIndex")
Swift.print("-> tabIndex: \(tabIndex)")
}

当选项卡状态更改时使窗口恢复状态无效。但我不确定 NSWindowRestoration 协议(protocol)的实现,当涉及文档 Controller 时,谁或什么需要实现该协议(protocol)。

我认为这就是最后一个函数从未被调用的原因。我获得了有关编码的调试输出,但在下一次应用程序执行期间,永远不会调用 restoreStore(coder:) 函数。

那么谁在这样的环境中实现了这个窗口恢复协议(protocol),我想这是我的问题,或者是一个这样做的不错的例子。

最佳答案

我的问题表明您对于基于文档的应用程序不需要任何特殊的东西;我已经更新了我的原型(prototype),该原型(prototype)在此处具有此支持和环境 SimpleViewer ,其中包含 Swift5,一个支持选项卡的基于文档的应用程序。

关于swift - NSDocument选项卡窗口恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030142/

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