为什么我收到'Unlock Focus used used many many'的消息?

时间:2015-01-05 17:41:29

标签: objective-c cocoa

我正在使用菜单驱动的应用程序访问各种类别的笔尖,并在第一次选择时收到上述错误消息。我第一次收到此消息。虽然不是应用程序查杀消息,但我正在尝试解决警告。

要注意我有5个不同的课程

我通过appDelegate.m代码中的按钮访问各种类别的nib,如下所示:

- (IBAction)btnShowPriceSource:(id)sender {
    if (ps == nil){

        ps = [[PriceSource alloc] initWithWindowNibName:@"PriceSource"];

    }

    [ps showWindow:nil];
}

我收到的信息如下:

2015-01-05 12:13:08.671 Stamp Collection[2527:442573] unlockFocus called too many times. Called on <NSButton: 0x608000140420>.

如何消除此消息?

2 个答案:

答案 0 :(得分:2)

此消息告诉您-lockFocus-unlockFocus不平衡。这可以是NSViewNSImage的一部分。这可能发生的原因有很多。您可能直接在某处调用lockFocus,但未能解锁。您可能在没有先致电NSGraphicsContext的情况下绘制成lockFocus或图片。您可能正在后台线程上执行绘图。

如果您可以相当可靠地重现它,您可能希望在-[UIView unlockFocus]-[NSImage unlockFocus]上放置一个符号断点,并至少看到可能涉及的视图。它可能与您的btnShowPriceSource方法无关。

答案 1 :(得分:0)

我在点击按钮时尝试显示模态窗口时收到相同的信息。

问题解决了显示模态&#34;外部&#34;按钮调用的代码。

在你的情况下:

- (IBAction)btnShowPriceSource:(id)sender {
    if (ps == nil){

        ps = [[PriceSource alloc] initWithWindowNibName:@"PriceSource"];

    }
    dispatch_async(dispatch_get_main_queue(), ^(void) {
        [ps showWindow:nil];
    }
}

块中的代码应该在将焦点锁定在按钮释放它之后立即执行。