【问题标题】:Cocoa: Application closes when window invisibleCocoa:当窗口不可见时应用程序关闭
【发布时间】:2013-02-07 14:22:05
【问题描述】:

我正在制作一个带有两个窗口的 Cocoa 应用程序。我想隐藏这两个窗口,调用一些屏幕捕获功能,然后恢复这些窗口。我用

[mainWindow orderOut:self];

隐藏窗口,但是当我这样做时,整个应用程序都会关闭。在我的 AppDelegate 中,我有以下功能:

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)sender 
{
    return YES;
}

我是否错误地隐藏了窗口?为什么 AppDelegate 在使用 orderOut 时会认为窗口已经关闭?

我的应用程序在没有使用上述 AppDelegate 方法的情况下完美运行,我将其添加为最后一步,以在我实际关闭所有窗口时终止应用程序。谁能建议如何在不关闭应用程序的情况下使我的窗口暂时不可见?

【问题讨论】:

    标签: objective-c xcode macos cocoa


    【解决方案1】:

    我忘记了……你能设置一个窗口的可见性吗?如果是这样就可以解决它。

    唯一的另一件事是在您以编程方式关闭窗口时设置一个 BOOL... iClosed Windows = YES。然后在恢复窗口时将其设置为 NO...然后在委托方法中检查该布尔值并相应地返回 YES 或 NO。

    【讨论】:

    • 我还没有找到一种方法来设置 Windows 的可见性。我一直在尝试像您建议的那样设置一个标志,但不知道如何从 AppDelegate 访问 BOOL/int。目前正在寻找这方面的一个例子!
    • 只需将其设为 .h 文件中的实例变量即可。然后在你的 init 或 awakeFromNib 或 applicationDidFinishLaunching 方法中给它一个初始值 NO。然后它是一个全局变量,您的 .m 文件中的任何方法都可以访问它。
    【解决方案2】:

    删除方法applicationShouldTerminateAfterLastWindowClosed。申请将保持开放。这是 OS X 上的正常行为。您可以关闭 Chrome 或 Safari 的所有窗口,它们将保持打开状态。如果需要,OS X 会关闭它们,例如在 iOS 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2012-04-17
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多