簡體   English   中英

如何限制 macOS 窗口管理恢復特定的 window?

[英]How do you restrict the macOS windowing management from restoring a specific window?

我有一個應用程序,其中有幾個 windows 定義為 windows 組,其結構符合主場景中的應用程序:

 WindowGroup("StandingsView") { StandingsView().environmentObject(appServices) }.handlesExternalEvents(matching: Set(arrayLiteral: "StandingsView"))

appServices 需要一些時間來配置,所以我不想在啟動時自動恢復 windows。 在用戶選擇有效、服務完全配置並且用戶按下“開始”SwiftUI 按鈕后,我創建了 windows:

 if let standingsURL = URL(string: "raceStratLiteApp://StandingsView") { NSWorkspace.shared.open(standingsURL) }

我嘗試在 appDelegate 的 applicationShouldTerminate() 中關閉 windows。 我還嘗試在 applicationShouldTerminate 中將 isRestorable 設置為 false:

 func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply { for window in NSApplication.shared.windows { window.isRestorable = false } return.terminateNow }

有沒有其他方法可以不恢復 window? 或者更好的是,能夠以編程方式將其恢復為以前的大小等,但僅在用戶指示“開始”時啟動

TIA

根據@Asperi 提供的提示,將以下內容寫入默認值將停止寫入 window 狀態:

$ defaults write <bundleid> NSQuitAlwaysKeepsWindows -bool false

所以這不是對應用程序的代碼更改,而是在安裝時完成的環境配置。

我還刪除了位於~/Library/Saved Application State/<bundleid>.savedState用於存檔構建和~/Library/Containers/<App Name>/Data/Library/Saved Application State/<bundleid>.savedState用於調試構建。 我不確定這是否重要,但是一旦執行了這些步驟,它就解決了問題。 謝謝@Asperi

@Asperi 在后面的評論中建議的代碼解決方案:

 func applicationDidFinishLaunching(_ notification: Notification) { UserDefaults.standard.register(defaults: ["NSQuitAlwaysKeepsWindows": false]) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM