0

この質問は、ドキュメント ベースのアプリでのタブ ウィンドウの復元に関するものです。

ユーザーがタブウィンドウを作成および変換できるOSXのドキュメントベースのアプリでは、各ウィンドウの「タブ」状態を保持および復元する必要があります。

現在、ドキュメント コントローラーはドキュメント ウィンドウを復元しますが、タブの展開は復元しません。個々のウィンドウに戻ります。すべてを 1 つにマージすることはできますが、以前のグループが失われるため、これは手間がかかりすぎます。

私のアプリドキュメントクラスの -makeWindowControllers()関数は、復元中に新しいコントローラーに影響を与える場所です。カスケードする必要があるかどうかは、false と読みます。

//  Determine cascade based on state of application delegate
controller.shouldCascadeWindows = <app did receive applicationWillFinishLaunching>

そのため、起動が完了するまで false になります。

最後に、私のウィンドウのクラスにはメソッドがあります:

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:)関数が呼び出されることはありません。

したがって、このような環境でこのウィンドウ復元プロトコルを実装するのは誰だと思いますか、それが私の質問です。

4

1 に答える 1