Этот вопрос касается восстановления окна вкладки в приложении на основе документов.
В OSX, приложении на основе документов, которое позволяет пользователю создавать и преобразовывать вкладки windows, мне нужно сохранить и восстановить состояние «вкладка» каждого окна.
В настоящее время мой контроллер документов восстанавливает свои документы windows, но не развертывание вкладки; Я получаю отдельные окна; Я могу объединить все обратно в одно, но это слишком жестко, поскольку их прежние группировки потеряны.
Функция класса моего приложения - makeWindowControllers()
- это то, где я влияю на новые контроллеры, должны ли они каскадироваться, что я бы прочитал как ложное, во время восстановления:
// 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
, кому или что нужно для реализации протокола, когда задействован контроллер документов.
Я думаю, что по этой причине последняя функция никогда не вызывается. Я получаю отладочную информацию о кодировке, но во время следующего выполнения приложения функция restoreStore(coder:)
никогда не вызывается.
Так, кто реализует этот протокол восстановления окна в такой среде, я думаю, это мой вопрос, или достойный пример, делающий поэтому.