我有一个基于Xcode模板的基于文档的应用程序。它没有使用核心数据。
我的申请非常简单:
在代码中,我调用toggleFullScreen:使用以下代码:
NSWindow * window = [NSApp mainWindow];
[window toggleFullScreen:self];
在计时器触发之前,并且在时间段结束之后恢复到非完整的模式。
最近,它已停止工作 - 第一次通话无效。我在第一次调用之前设置了一个断点,它只是执行而没有任何效果。
我甚至设置了一个NSWindowDelegate类进行测试,它响应windowDidEnterFullScreen:和windowDidExitFullScreen:当用户使用菜单项或使用标准窗口控件手动切换全屏幕时。
函数windowDidFailToEnterFullScreen:在第一次切换失败后,delgate中永远不会调用它。
第二个调用(使用完全相同的代码)有效 - 它将窗口带入全屏(不是全屏,因为它应该是,因为第一次调用不起作用)。
有什么想法吗?
令人沮丧的是,这曾经工作过!我有一个较旧版本的应用程序使用相同的代码做同样的事情,它工作正常。这破坏了我的理论,即它与升级到El Capitan有关。
那么可能发生了什么?我无法为我的生活而努力。我是否在界面构建器中意外更改了某些内容?也许我的项目/编译器设置?
非常感谢任何帮助!
此致
约翰
答案 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可能导致此更改的信息?
此致
约翰