swift - macOS:有没有办法在不崩溃的情况下访问窗口 Controller ?

标签 swift macos cocoa swift4 nswindowcontroller

我必须通过这样做来访问 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) 

此行使应用程序处于事件状态。

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

有什么方法可以让它工作吗?

最佳答案

您的 View Controller 正在加载并不意味着它已显示在屏幕上,甚至位于您的窗口内。很明显,您不能从 viewDidLoad 执行与窗口相关的代码。

相反,您应该注册一个 NSWindowDelegate到您的窗口,但最佳操作过程在很大程度上取决于您要对窗口执行的操作。

关于swift - macOS:有没有办法在不崩溃的情况下访问窗口 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732671/

相关文章:

cocoa - 将文件拖放到 NSOutlineView 中

ios - 如何使用 Color Array (Swift) 中的数据

ios - SwiftUI:显示重复按钮且未触发操作的催化剂警报

macos - 使用 Swift 设置 NSSplitViewController Pane 的宽度

macos - 显示 TStringGrid 单元格的工具提示

cocoa - 为什么要子类化 NSManagedObject 呢?

swift - 打印的double值与原来设置的值不同

swift - 为什么 Swift 不自动处理内存泄漏?

从 Bundle 复制文件时出现 Swift FileManager 错误

iphone - 如何为 iPhone 中的所有属性使用两位数字格式化日期