Восстановление окна вкладки 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, приложение на основе документов, поддерживающее вкладки.

Другие вопросы по тегам