macOS:有没有一种方法可以访问窗口控制器而不会崩溃?

时间:2019-08-30 20:05:14

标签: swift macos cocoa swift4 nswindowcontroller

我必须通过这样做来访问windowController

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

一旦我尝试在viewDidAppear内部运行此应用,此应用就会崩溃

  

线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

我在网上发现的解决方案是在访问windowController之前添加以下行:

NSApp.activate(ignoringOtherApps: true) 

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

但是此方法不能真正解决任何问题,因为如果在我的应用程序加载时另一个应用程序成为前端应用程序,则我的应用程序将崩溃。

有什么办法可以使这项工作成功吗?

1 个答案:

答案 0 :(得分:1)

正在加载的视图控制器并不意味着它已经显示在屏幕上,甚至不位于窗口内。很明显,您无法从viewDidLoad进行与窗口相关的代码。

相反,您可能应该在窗口中注册NSWindowDelegate,但是最佳的操作方法很大程度上取决于您要对窗口执行的操作。