macOS:有没有办法在不崩溃的情况下访问 window 控制器?

macOS: Is there a way to access the window controller without crashing?

我必须这样做才能访问 windowController

let windowController = NSApplication.shared.mainWindow?.windowController as! WindowController

当我尝试在 viewDidAppear 中 运行 时,应用程序崩溃

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

我在网上找到的解决方案是在访问 windowController 之前添加这一行:

NSApp.activate(ignoringOtherApps: true) 

此行使应用程序处于活动状态。

但是这个方法并没有真正解决任何问题,因为如果在我的应用程序加载时另一个应用程序成为前端应用程序,我的应用程序就会崩溃。

有什么方法可以实现吗?

您的视图控制器正在加载并不意味着它已显示在屏幕上,甚至位于您的 window 中。很明显,您不能从 viewDidLoad.

中执行与 window 相关的代码

相反,您可能应该向您的 window 注册一个 NSWindowDelegate,但最好的做法在很大程度上取决于您尝试使用 window 做什么。