windowA 中的按钮IBAction
调用runModalForWindow:windowB
。
windowB 成为键和模态。
windowB 有一个popUpWindowDatePicker,在显示时会调用stopModal
,然后popUpWindowDatePicker变为键,而 windowB 会重置键,而不是模态的。此时没有窗口是模态的。
当popUpWindowDatePicker被解除时,其didResignFirstResponder
方法将布尔值设置为YES。 windowB 然后变为键, windowB 的windowController windowDidBecomeKeyNotification
触发,检查布尔值,如果是,则调用runModalForWindow:self.window
。
现在 windowB 是模态和密钥。 windowA 仍处于打开状态,但不是密钥。
windowB 有Okay和Cancel按钮调用:
windowB 上的[NSApp stopModalWithCode:returnCode]
然后orderOut:
和close
。
如果使用popUpWindowDatePicker,然后在 windowB 关闭,Okay或Cancel之后的任何时间,将调用涉及Okay或Cancel按钮的Assertion Failure:< / p>
*** 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,则没有断言失败。
似乎 windowB 上的序列runModal-stopModal-runModal-stopModal
与按下的按钮上的lockFocus失败有关,但是我无法找到一种方法来追踪更多来解决此问题这个问题。
任何人都可以提供任何提示或想法吗?
答案 0 :(得分:2)
我在使用大量文本绘制NSTextView时遇到了类似的问题。解决此消息以及与“失去焦点”或调用“错误对象”相关的其他崩溃的原因是:从核心动画层中删除对象(以及它可能拥有的任何子对象)。
要在我的NSTextView上执行此操作,我在UIbuilder上轻松取消选中任何动画,在实用工具面板中对应于核心动画层的最后一个选项卡。
希望它有所帮助,
答案 1 :(得分: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,[self isHiddenOrHasHiddenAncestor] = 1
这似乎是狮子会OS X之前的错误,因为我已经升级到Lion,它已经消失了...... 我猜它发生在未定义的showModal序列(在我的情况下是NSMenu)和NSWindow orderOut之后的某个程序执行点。在该应用程序继续工作,但变得不稳定之后,可以停止检查计时器,或者UI停止重绘(但仍然有效)。
答案 2 :(得分:0)
这里有类似的问题。我的问题是我的项目(tableView)失去了焦点。我所做的是将tableView指定为firstReponder,以便再次获得焦点。
//...some code...
[self.searchTableView reloadData];
AGAppDelegate *del = [[NSApplication sharedApplication] delegate];
[del.window makeFirstResponder:self.searchTableView];
希望这会对某人有所帮助。
答案 3 :(得分:0)
我添加了canDraw
方法以确保lockFocus
可用。这解决了我的问题。