2015-01-05 72 views
1

我正在使用菜單驅動的應用程序來訪問各種類的筆尖並在第一次選擇時收到上述錯誤消息。我僅在第一時間收到此消息。雖然不是應用程序查殺消息,但我正在嘗試解決警告。爲什麼我收到'解鎖焦點太多次'的消息?

需要注意的有5個不同類別我訪問

我通過按鈕訪問各種類的筆尖在我appDelegate.m的代碼直通如下代碼:

- (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>. 

如何消除此消息?

+0

什麼OS X版本?您是否使用圖層支持的視圖?我已經看到了很多,以及10.10下的一些奇怪的崩潰(相同的代碼在10.9上運行得很好)。 –

+0

有趣 - 我已經去了10.10.1,並且已經注意到了。我不記得在10.9下有這個問題。 – TLL

回答

2

此消息告訴你,-lockFocus與其-unlockFocus不平衡。這可以作爲NSViewNSImage的一部分。這可能會發生很多原因。您可能會直接致電lockFocus,並且無法解鎖。您可能正在繪製NSGraphicsContext或圖像,而無需先致電lockFocus。您可能正在後臺線程上執行繪圖。

如果你能夠相當可靠地重現它,你可能需要在-[UIView unlockFocus]-[NSImage unlockFocus]上加一個符號斷點,並至少看看可能涉及哪個視圖。這可能與您的btnShowPriceSource方法無關。

0

我試着在點擊一個按鈕時顯示一個模式窗口時有同樣的消息。

問題解決了顯示按鈕調用的代碼的模式「外部」的代碼。

在你的情況,這將是:

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

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

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

塊中的代碼應執行無論是鎖定焦點的按鈕釋放後立即。

相關問題