0

我单击NSButton (openPane位于我的 OS X 应用程序主窗口上的 l) 以NSPanel (myPanel使用以下方法显示 a ):

- (IBAction)openPanel:(id)sender {
    [_myPanel makeKeyAndOrderFront:nil];
}

一切都按预期工作,除了我第一次单击按钮(openPanel)时在调试区域中得到以下描述:

"unlockFocus called too many times. Called on NSButton: 0x610000141080."

Panel的属性选择如下:

Style: Utility Panel, 
Appearance:Title Bar and Shadow, 
Controls:  Close, 
Behaviour: Restorable, 
Memory: Deferred

我浏览了网络,但找不到任何解释。有谁知道为什么会发生这种情况或如何解决?

4

4 回答 4

1

我在使用 XCode 7.0 beta 6 使用故事板和 segue 来显示工作表时遇到了同样的问题。如果您直接从操作中打开面板,似乎会发生一些常见问题。

要解决此问题,只需从主队列中打开面板:

- (IBAction)openPanel:(id)sender {
    dispatch_async(dispatch_get_main_queue(), ^{
        [_myPanel makeKeyAndOrderFront:nil];
    });
}

这也将解决 swift 和故事板中的类似问题。使用此快速代码调用 segue:

@IBAction func onButtonClicked(sender: AnyObject) {
    dispatch_async(dispatch_get_main_queue(), {
        self.performSegueWithIdentifier("identifier", sender: self);
    })
}
于 2015-09-01T22:10:55.523 回答
0

我用以下解决了同样的问题

在页眉中

@interface aWindowController : NSWindowController
{
    /* other Vars */

    NSOpenPanel *panel;
}

在.m

- (void)windowDidLoad {
    [super windowDidLoad];

    /* other stuff */

    /* set Panel Properties */
    panel = [NSOpenPanel openPanel];

    [panel setCanChooseDirectories:YES];
    [panel setCanChooseFiles:NO];
    [panel setAllowsMultipleSelection:YES];
}

在 NSButton IBACTION

- (IBAction)getFiles:(id)sender
{
    NSArray *resultArry;

    if([panel runModal] == NSFileHandlingPanelOKButton ){
        resultArry = [panel URLs];
        return resultArry;
    }

    return nil;
}

ARC 将清理面板。

于 2015-01-30T23:38:36.800 回答
0

不知道那里发生了什么,但我会尝试这个来展示你的 NSPanel:

-(IBAction)openPanel:(id)sender {
[[NSApplication sharedApplication] beginSheet:_myPanel
                               modalForWindow:self.window
                                modalDelegate:self
                               didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
                                  contextInfo:nil];

此外,您应该确保为您的 NSPanel 激活了“关闭时释放”复选框。在 Interface Builder 中搜索它。

编辑:你在你的 NSPanel 上画什么吗?设置 NSColor 或显示 NSImage ?我的猜测是您正在显示一个 NSImage 并且对此搞砸了:Apple Doc: lockFocus

于 2014-12-30T10:57:13.870 回答
0

我在使用名为 Segue 的 NSPopUpButton 时遇到了同样的问题,@Flovdis 的答案对我有用。

这是我使用的目标 C 代码:

dispatch_async(dispatch_get_main_queue(), ^{
        [self performSegueWithIdentifier:@"MySegue" sender:self];
    });
于 2015-12-02T16:56:59.150 回答