windowA中按钮的IBAction调用runModalForWindow:windowB.
windowB成为键和模态.
windowB有一个popUpWindowDatePicker,它在显示时调用stopModal,然后popUpWindowDatePicker变为key,windowB会调用key而不是modal.此时没有窗口是模态的.
当popUpWindowDatePicker被解除时,其didResignFirstResponder方法将布尔值设置为YES.然后windowB成为键,windowB的windowController windowDidBecomeKeyNotification触发,检查布尔值,如果是,则调用runModalForWindow:self.window.
现在windowB是模态和键. windowA仍然是开放的,但不是关键.
windowB有Okay和Cancel按钮,它们调用:
[NSApp stopModalWithCode:returnCode]然后orderOut:并关闭windowB.
如果使用popUpWindowDatePicker,然后在使用Okay或Cancel关闭该windowB之后的任何时间,将调用涉及Okay或Cancel按钮的Assertion Failure:
*** 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
如果使用Okay或Cancel关闭windowB并且未使用popUpWindowDatePicker,则没有断言失败.
似乎windowB上的序列runModal-stopModal-runModal-stopModal参与了按下按钮时lockFocus的失败,但是我找不到一种方法来追踪更多来解决这个问题.
谁能提供任何提示或想法?
最佳答案 在做一些带有大量文本的NSTextView绘图时,我遇到了类似的问题.解决此消息以及与“失去焦点”或调用“错误对象”相关的其他崩溃的原因是:从核心动画层中删除对象(以及它可能拥有的任何子对象).
要在我的NSTextView上执行此操作,我在UIbuilder上轻松取消选中任何动画,实用工具面板中与Core Animation Layer对应的最后一个选项卡.
希望能帮助到你,