第一次调用toggleFullScreen:不起作用(以前用过!)

时间:2015-10-27 15:15:54

标签: objective-c xcode cocoa

我有一个基于Xcode模板的基于文档的应用程序。它没有使用核心数据。

我的申请非常简单:

  • 文档窗口为Interface Builder
  • 中的全屏收集行为设置了主窗口
  • 切换全屏菜单项按预期工作,窗口控件也是如此。

在代码中,我调用toggleFullScreen:使用以下代码:

NSWindow * window = [NSApp mainWindow];
[window toggleFullScreen:self];

在计时器触发之前,并且在时间段结束之后恢复到非完整的模式。

最近,它已停止工作 - 第一次通话无效。我在第一次调用之前设置了一个断点,它只是执行而没有任何效果。

我甚至设置了一个NSWindowDelegate类进行测试,它响应windowDidEnterFullScreen:和windowDidExitFullScreen:当用户使用菜单项或使用标准窗口控件手动切换全屏幕时。

函数windowDidFailToEnterFullScreen:在第一次切换失败后,delgate中永远不会调用它。

第二个调用(使用完全相同的代码)有效 - 它将窗口带入全屏(不是全屏,因为它应该是,因为第一次调用不起作用)。

有什么想法吗?

令人沮丧的是,这曾经工作过!我有一个较旧版本的应用程序使用相同的代码做同样的事情,它工作正常。这破坏了我的理论,即它与升级到El Capitan有关。

那么可能发生了什么?我无法为我的生活而努力。我是否在界面构建器中意外更改了某些内容?也许我的项目/编译器设置?

非常感谢任何帮助!

此致

约翰

2 个答案:

答案 0 :(得分:0)

您是否尝试过清洁项目?还要清理项目构建文件夹。按cmd + shift + K,然后在Xcode中按cmd + shift + opt + K.然后重新构建项目。

答案 1 :(得分:0)

好吧,经过多次撕裂后我终于解决了这个问题。

问题是第一次调用toggleFullScreen:在一个块中调用,用作NSAlert的处理程序。

出于某种原因,现在需要在切换工作之前手动关闭NSAlert窗口。

这是我的解决方案:

- (IBAction) areYouSure:(NSButton *) sender {

    NSWindow *window = [NSApp mainWindow];


    // Ask the user if they are sure

    NSAlert * alert = [[NSAlert alloc] init];

    // .. set up NSAlert ..

    [alert beginSheetModalForWindow:window completionHandler:^(NSModalResponse returnCode) {
        if (returnCode == NSAlertSecondButtonReturn)
        {        
            [[alert window] close]; // This line solved the problem!

            [window toggleFullScreen:self]; // Without above line, this does nothing.
        }
    }]; // end block
}

正如我在原帖中提到的,这个在我更新到El Capitan之前使用工作,没有使用[[alert window] close]调用。

所以,有些东西必须改变,虽然我找不到任何解释上述行为的文档。

我的应用程序的旧版本在另一个窗口上显示警报,并且在另一个窗口上调用了toggleFullScreen。

我猜这个问题与在完成处理程序中调用toggleFullScreen的事实有关,而且调用与NSAlert所连接的同一窗口也是如此。

现在必须在toggleFullScreen工作之前手动关闭NSAlert。

希望这将有助于将来的某个人!

有没有人有关于此行为的更多信息,以及El Capitan可能导致此更改的信息?

此致

约翰