Восстановление окна вкладки NSDocument
Этот вопрос касается восстановления окна вкладок в приложении на основе документов.
В OSX, приложении на основе документов, которое позволяет пользователю создавать и преобразовывать окна вкладок, мне нужно сохранять и восстанавливать состояние вкладок каждого окна.
В настоящее время мой контроллер документов восстанавливает свои окна документов, но не развертывание вкладок; Возвращаю отдельные окна; Я могу объединить все обратно в одно, но это слишком жестоко, поскольку их прежние группировки потеряны.
Мой класс документов приложения - 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:)
функция никогда не вызывается.
Итак, кто реализует этот протокол восстановления окна в такой среде, я думаю, это мой вопрос или достойный пример этого.
1 ответ
Мой вопрос показывает, что вам не нужно ничего особенного для приложения на основе документов; Я обновил свой прототип, который включает эту поддержку и среду здесь SimpleViewer, в котором есть Swift5, приложение на основе документов, поддерживающее вкладки.