NSDocument Tab Восстановление окна - PullRequest
0 голосов
/ 02 февраля 2020

Этот вопрос касается восстановления окна вкладки в приложении на основе документов.

В 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:) никогда не вызывается.

Так, кто реализует этот протокол восстановления окна в такой среде, я думаю, это мой вопрос, или достойный пример, делающий поэтому.

1 Ответ

0 голосов
/ 04 февраля 2020

Мой вопрос показывает, что вам не нужно ничего особенного для приложения на основе документов; Я обновил свой прототип, который поддерживает эту поддержку и среду здесь SimpleViewer , который включает Swift5, приложение на основе документов, поддерживающее вкладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...