gpt4 book ai didi

macos - 通过 Swift 实现 Cocoa 中的 UI 保存/恢复机制

转载 作者:行者123 更新时间:2023-12-03 16:52:14 24 4
gpt4 key购买 nike

我想保存复选框的状态,退出应用程序,然后再次启动 macOS 应用程序以查看复选框的恢复状态。但我的应用程序的用户界面中没有恢复状态。

我做错了什么?

import Cocoa

class ViewController: NSViewController {

@IBOutlet weak var tick: NSButton!

override func viewDidLoad() {
super.viewDidLoad()
}

override func encodeRestorableState(with coder: NSCoder) {
super.encodeRestorableState(with: coder)
coder.encode(tick.state, forKey: "")
}

override func restoreState(with coder: NSCoder) {
super.restoreState(with: coder)
if let state = coder.decodeObject(forKey: "") as? NSControl.StateValue {
tick.state = state
}
}
}

最佳答案

据我所知,这是实现窗口和/或其内容的自定义 UI 状态恢复所需的绝对最低限度。

在此示例中,我有一个带有复选框的窗口,该复选框的状态表示我希望在重新启动应用程序时恢复的一些自定义 View 状态。

该项目包含一个带有单个复选框按钮的窗口。该按钮的值绑定(bind)到窗口内容 View Controller 的 myState 属性。因此,从技术上讲,这是一个复选框控件这一事实是无关紧要的;我们实际上将保留和恢复 myState 属性(UI 会自行处理)。

为了实现此功能,窗口的 restorable 属性设置为 true(在窗口对象检查器中),并为窗口分配一个标识符 ("PersistentWindow “)。 NSWindow 是子类 (PersistentWindow),并且子类实现 restorableStateKeyPaths 属性。此属性列出了要保留/恢复的自定义属性。

注意:如果您可以根据键值兼容属性路径列表来定义 UI 状态恢复,那么这是(迄今为止)最简单的解决方案。如果没有,您必须实现 encodeRestorableState/restoreState 并负责调用 invalidateRestorableState

这是自定义窗口类:

class PersistentWindow: NSWindow {

// Custom subclass of window the perserves/restores UI state

// The simple way to preserve and restore state information is to just declare the key-value paths
// of the properties you want preserved/restored; Cocoa does the rest
override class var restorableStateKeyPaths: [String] {
return [ "self.contentViewController.myState" ]
}

// Alternatively, if you have complex UI state, you can implement these methods
// override func encodeRestorableState(with coder: NSCoder) {
// // optional method to encode special/complex view state here
// }
//
// override func restoreState(with coder: NSCoder) {
// // companion method to decode special/complex view state
// }

}

这是内容 View Controller 的(相关部分)

class ViewController: NSViewController {

@objc var myState : Bool = false

blah, blah, blah
}

(我将其构建为 Cocoa 应用程序项目,如果有人告诉我可以将其上传到哪里,我就可以上传它。)

关于macos - 通过 Swift 实现 Cocoa 中的 UI 保存/恢复机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331083/

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