2010-08-02 12 views
3

一個按鈕的IBAction窗口A調用runModalForWindow:windowB如何在退出時使用modalWindow處理NSButton lockFocus上的斷言失敗?

windowB成爲關鍵和模態。

窗口B具有呼籲顯示stopModal一個popUpWindowDatePicker,然後popUpWindowDatePicker變得關鍵,和窗口B辭職鍵和不是模態。此時沒有窗口是模態的。

當popUpWindowDatePicker被取消時,其didResignFirstResponder方法將布爾值設置爲YES。 windowB然後成爲關鍵,並且windowB的windowController windowDidBecomeKeyNotification觸發,檢查布爾值,如果是YES調用runModalForWindow:self.window

現在windowB是模態和關鍵。 windowA仍然是開放的,但不是關鍵。

窗口B有好和取消其呼叫按鈕:在窗口B [NSApp stopModalWithCode:returnCode]然後orderOut:close

如果使用popUpWindowDatePicker,和然後窗口B後的任何時間被關閉與好或取消,斷言失敗被稱爲涉及好或取消按鈕:

*** Assertion failure in -[NSButton lockFocus], /SourceCache/AppKit/AppKit-1038.29/AppKit.subproj/NSView.m:5237 

-[NSButton(0x20021cd60) lockFocus] failed with window=0x20021c0c0, windowNumber=-1, [self isHiddenOrHasHiddenAncestor]=0 

如果窗口B用Okay或Cancel關閉,並且popUpWindowDatePicker尚未使用,則不存在斷言失敗。

似乎在窗口B序列runModal-stopModal-runModal-stopModal參與lockFocus上按下按鈕時的失敗,但我不能找到一種方法來追蹤比這個更來解決這個問題。

任何人都可以提供任何提示或想法嗎?

+0

「按鈕的方法...」哪一個?按鈕有很多方法,'lockFocus'只是其中的一個。 「...按鈕沒有'lockFocus'設置...」這沒有意義,因爲'lockFocus'是一個動詞,而不是一個屬性。你有沒有試過用調試器打破異常? – 2010-08-03 03:17:44

+0

我編輯了我的問題,以反映我在按下按鈕時指向操作方法,並且在退出時lockFocus不可用。我會盡力打破例外情況,並回報。謝謝。 – lulu 2010-08-03 12:51:00

+0

我已經重新寫了我的問題,以嘗試更清晰。 – lulu 2010-08-11 18:02:49

回答

0

我遇到類似的問題,在這裏我的日誌:

*斷言失敗 - [NSSecureTextField lockFocus],/SourceCache/AppKit/AppKit-1038.36/AppKit.subproj/NSView.m:5237

[13755:903] unlockFocus調用了太多時間。

[13755:903] unlockFocus調用的時間太多。

[13755:903] - [NSSecureTextField(0x100514b80)lockFocus]失敗,窗口= 0x1005298d0,windowNumber = 714,[自isHiddenOrHasHiddenAncestor] = 1

看來它是預獅子OS X的錯誤,因爲ARTER我已經升級到獅子已經消失... 我想它發生在未定義的showModal(NSMenu在我的情況下)和NSWindow orderOut在程序執行的某個點的順序。之後,應用程序繼續工作,但變得不穩定,因爲檢查計時器可能會停止,或者UI停止重繪(但仍然有效)。

+0

感謝您回覆,timur。我沒有使用NSSecureTextField。我從來沒有發現這個問題,但是我做了重新設計,問題解決了,我的結論沒有任何結論。我看到我們都有隱藏或有隱藏祖先出現在日誌中。 – lulu 2012-03-31 02:26:18

0

這裏有類似的問題。我的問題是我的項目(tableView)失去了焦點。我所做的就是將我的tableView指定爲firstReponder,以便它再次獲得焦點。

//...some code... 
[self.searchTableView reloadData]; 
AGAppDelegate *del = [[NSApplication sharedApplication] delegate]; 
[del.window makeFirstResponder:self.searchTableView]; 

希望這會幫助別人。

1

我在使用大量文本在NSTextView上繪圖時遇到了類似的問題。什麼解決了這個消息,以及與'失去焦點'或調用'錯誤的對象'有關的其他崩潰是:從Core Animation Layer中移除該對象(以及它可能擁有的任何子對象)。

要在我的NSTextView上執行此操作,我將在UIbuilder上取消選中任何動畫,這是核心動畫層對應的實用程序面板中的最後一個選項卡。

希望它能幫助,

+0

爲我解決了。我提出了一個從ArrayController中刪除tableview項目的警報,並得到了這個錯誤。乾杯 – GeoffCoope 2014-12-05 17:13:21

0

我添加了一個canDraw方法,以確保lockFocus是可用的。這解決了我的問題。