macos - NSWindow 返回 nil (NSApplication)

标签 macos swift nswindow

我遇到了无法访问应用程序主窗口的问题, 因为它返回 nil

let window = NSApplication.sharedApplication().mainWindow

我发现了类似的问题:

How to get Main Window (App Delegate) from other class (subclass of NSViewController)?

但是在做:

let window = (NSApplication.sharedApplication() as! NSArray).objectAtIndex(0)

好像也没用。

我必须在 Storyboard 中乱搞吗?

提前致谢。

更新:

我实际上是在尝试从 Objective-C 移植一些东西。

    NSWindow *mainWindow = [[[NSApplication sharedApplication] windows] objectAtIndex:0];
    NSLog(@"%@", mainWindow.contentViewController);

当放入 NSViewControllerviewDidLoad() block 时,这会返回一个正确的值,所以我猜测 NSApplication 有问题。 sharedApplication().

最佳答案

如果主应用程序窗口在 macOS 上未激活,它也可以返回 nil。例如,我在制作拖放文件 uploader 时遇到了这个问题。如果窗口不在前面(在操作系统上),它将返回 nil。以下代码行将激活您的应用程序(置于最前面)

NSApp.activateIgnoringOtherApps(true)

在我的例子中,我还需要一个计时器来延迟对 mainWindow 的调用。

关于macos - NSWindow 返回 nil (NSApplication),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467531/

相关文章:

ruby-on-rails - 修复 "ruby installation is missing psych"错误?

macos - CVPixelBufferRef 到 NSImage

swift - 如何对 NSUserDefault 中的 NSMutableDictionary 存储数组进行排序?

swift - 以编程方式创建 NSWindow

c++ - 在 mac OS-X 多线程项目上使用 asl 布局进行日志记录

cocoa - 禁用 NSTextField 的区域设置

ios - 如何强制 UIPickerView.selectRow 调用 didSelectRow 方法?

macos - 仅菜单栏应用程序,没有响应

macos - -SendEvent 的行为不符合预期

swift - 在没有 XCode 或 NIB 的情况下使用 Swift 在 OSX 上显示窗口