To achieve aforementioned effect let’s create NSSearchField
and a custom class named RestoredWindow
containing just one property:
import Cocoa
class RestoredWindow: NSWindow {
override class var restorableStateKeyPaths: [String] {
return ["self.contentViewController.searchField.stringValue"]
}
}
Assign this custom class to Window Controller in Identity Inspector.
Next, let’s bind searchField.stringValue
property to ViewController
in Value
section of Bindings Inspector.
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var searchField: NSSearchField!
override func viewDidLoad() {
super.viewDidLoad()
}
}
After this, make sure you haven’t checked
Close windows when quitting an app
option in yourSystem Preferences
->General
tab.
Now, entered text in NSSearchField
restored after quitting and launching the app again.
P.S.
I’ve tried the same way as you but failed too. This approach doesn’t work for me:
override func encodeRestorableState(with coder: NSCoder) {
coder.encode(searchField.stringValue, forKey: "restore")
super.encodeRestorableState(with: coder)
}
override func restoreState(with coder: NSCoder) {
if let state = coder.decodeObject(forKey: "restore") as? NSSearchField {
searchField.stringValue = state
}
super.restoreState(with: coder)
}