2010-08-02 74 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是可用的。这解决了我的问题。