概括:
使用 Cocoa 的内置用户界面保存机制保存/恢复NSSearchField
我的状态的正确方法是什么?NSViewController
细节:
我正在开发我的第一个 macOS 应用程序,但我在用户界面的状态恢复方面遇到了一些问题。到目前为止,我的工作已经到了在我的子类中调用encodeRestorableState(with:)
andrestoreState(with:)
方法的地步NSViewController
。
我的视图控制器中有一个NSSearchField
,我想保存/恢复搜索字段的状态,包括其文本、任何选择、光标位置以及当前是否处于焦点。
如果我使用以下代码,则可以正确保存和恢复文本:
override func encodeRestorableState(with coder: NSCoder) {
super.encodeRestorableState(with: coder)
coder.encode(searchField.stringValue, forKey: "searchText")
}
override func restoreState(with coder: NSCoder) {
super.restoreState(with: coder)
if let searchText = coder.decodeObject(forKey: "searchText") as? String {
searchField.stringValue = searchText
}
}
显然我可以添加更多代码来保存/恢复搜索字段的选择和光标位置等。
我真正的问题是,有没有更好、更合适、更自动的方法来保存和恢复搜索字段的状态?还是需要我为要保存的搜索字段的每个属性编写自己的代码?
我尝试使用:
searchField.encodeRestorableState(with: coder)
和:
searchField.restoreState(with: coder)
在上述两种方法中,但是当我的应用程序重新启动时,搜索字段中没有出现任何内容。
我还实现了:
override class func restorableStateKeyPaths() -> [String] {
var keys = super.restorableStateKeyPaths()
keys.append("searchField.stringValue")
return keys
}
我的视图控制器中插座属性"searchField"
的名称在哪里。NSTextField
当我的应用程序启动但文本未在搜索字段中恢复时调用此方法。
此视图控制器是从情节提要创建的。视图控制器的identifier
设置。搜索字段identifier
也已设置。这个视图控制器是另一个视图控制器的子视图控制器。
我已通读“核心应用程序设计”文档的用户界面保留部分,但不清楚如何保存/恢复视图控制器的视图,以及其中有多少是自动与手动。
支持 OSX 10.12 和 10.11。任何答案中的 Objective-C 或 Swift 都可以。