【问题标题】:Mac: NSWindowController, view does not open after it's closedMac:NSWindowController,关闭后视图不打开
【发布时间】:2014-03-26 21:19:20
【问题描述】:

这可能是我想念的一些简单的事情,但这就是正在发生的事情:

我正在制作一个菜单项应用程序(应用程序是代理 = YES)

所以我有一个运行整个事情的 MainViewAppDelegate。当单击菜单项上的按钮时,它会检测到。

然后我有一个上传的NSWindowController:

#import <Cocoa/Cocoa.h>

@interface UploadView : NSWindowController
- (IBAction)upload:(id)sender;
@end

.m:

-(id)init {
    if (! (self = [super initWithWindowNibName:@"UploadView"])) {
        // Initialization code here.
        return nil;
    }

    return self;
}

在 MainViewAppDelegate 中,按下该按钮时我会这样做:

if (!uploadView) {
    uploadView = [[UploadView alloc] init];
}
[uploadView showWindow:self];

现在,只要我不点击 xcode,它就可以工作。一旦我这样做了(比如我让 chrome 成为活动选项卡),即使我回到 xcode,它也不再工作了。

有什么想法吗?

【问题讨论】:

  • 我的直觉告诉我,这与您的 nib 文件中 UploadViewretain 属性有关。
  • 检查您的网点。当 NIB 首次加载时没有连接时,您会得到一个与窗口的幻像连接,该窗口在第一次关闭后立即消失(因为,您知道,这在 20 年前的某些人看来是合理的)。
  • NSWindow 的“关闭时释放”复选框曾经是(不是很有帮助的)默认值。
  • 这真的让我很困惑。它似乎与关闭它没有任何关系。如果我关闭它而不离开 xcode,它会再次打开。只是如果我将其他一些窗口设为活动窗口,它就会停止工作。如果有帮助,这是我的整个代码库:github.com/Jonovono/cutter 它主要是 MainViewAppDelegate 和 UploadView

标签: objective-c macos cocoa xcode5


【解决方案1】:

我在 UploadView 代码中看不到任何问题。但是您可以尝试将 xib 中的 UploadView 面板连接到 File's Owner 窗口插座并尝试。我现在创建了一个类似的演示并尝试了,我没有发现任何问题。

【讨论】:

  • 是的,我将 UploadView 中的面板连接到 UploadView xib 中的文件所有者,但仍然无法正常工作。
  • 在您提供的代码中,我没有看到窗口与面板的绑定。
  • 你的意思是像ctrl-click从上面的“Panel-Window”拖动到“Files Owner”并在弹出“window”的地方创建一个新的引用对象吗?
  • 啊哈!我得到了它。谢谢你的帮助。我要做的是添加:[NSApp activateIgnoringOtherApps:YES];到打开视图的函数,现在它正在工作。
【解决方案2】:

我要补充的是:

[NSApp activateIgnoringOtherApps:YES];

在尝试打开窗口之前。

【讨论】:

    猜你喜欢
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多