4

ボタンIBActionwindowA呼び出しますrunModalForWindow:windowB

windowBがキーとモーダルになります。

windowBstopModalには表示時に呼び出すpopUpWindowDatePicker があり、 popUpWindowDatePicker がキーになり、 windowBはキーを辞任し、モーダルではありません。この時点ではウィンドウはモーダルではありません。

popUpWindowDatePicker が閉じられると、そのdidResignFirstResponderメソッドはブール値を YES に設定します。次にwindowBがキーになり、windowBの windowControllerwindowDidBecomeKeyNotificationが起動し、ブール値をチェックし、YES の場合は を呼び出しますrunModalForWindow:self.window

現在、windowBはモーダルでキーです。windowAはまだ開いていますが、キーではありません。

windowBには[NSApp stopModalWithCode:returnCode]、次を呼び出す [ OK ]ボタンと [キャンセル ] ボタンがあります。orderOut:close

popUpWindowDatePicker が使用され、windowBが OK またはキャンセルで閉じられた後いつでも、OK またはキャンセル ボタンを含むアサーション エラーが呼び出されます。

*** 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

windowBが Okay または Cancel で閉じられ、 popUpWindowDatePickerが使用されていない場合、アサーション エラーは発生しません。

押されたボタンのlockFocusの失敗には、 windowBのシーケンスが関係しているようですがrunModal-stopModal-runModal-stopModal、これ以上トレースしてこの問題を解決する方法が見つかりません。

誰でもヒントや考えを提供できますか?

4

4 に答える 4

2

大量のテキストを含む NSTextView を描画しているときに、同様の問題が発生しました。このメッセージと、「フォーカスの喪失」または「間違ったオブジェクト」の呼び出しに関連するその他のクラッシュを解決したのは、コア アニメーション レイヤーからオブジェクト (およびその子) を削除することでした。

私の NSTextView でこれを行うには、コア アニメーション レイヤーに対応するユーティリティ パネルの最後のタブである UIbuilder で、アニメーションのチェックを簡単に外しました。

それが役に立てば幸い、

于 2013-02-06T16:15:44.217 に答える
0

I faced similar problem, here my logs:

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

[13755:903] unlockFocus called too many time.

[13755:903] unlockFocus called too many time.

[13755:903] -[NSSecureTextField(0x100514b80) lockFocus] failed with window=0x1005298d0, windowNumber=714, [self isHiddenOrHasHiddenAncestor]=1

It seems it is pre-Lion OS X bug, because arter I've upgrade to Lion it has gone away... I guess it occurs after undefined sequence of showModal (NSMenu in my case) and NSWindow orderOut in some point of program execution. After that application continue to work, but became unstable, for examle timer could be stopped, or UI stops to redraw (but still works).

于 2012-03-14T13:49:30.557 に答える
0

ここで同様の問題がありました。私の問題は、アイテム (tableView) がフォーカスを失ったことです。私がしたことは、再びフォーカスを得るために、tableView を firstReponder として指定することです。

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

これが誰かを助けることを願っています。

于 2012-09-27T18:20:00.230 に答える
0

canDraw利用可能であることを確認する方法を追加しましたlockFocus。これで私の場合の問題は解決しました。

于 2017-12-04T11:49:48.270 に答える