我把它分解成一个非常小的项目。在应用程序委托中使用以下代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
TestingWindowController * testingWindowController = [[TestingWindowController alloc] initWithWindowNibName: @"TestingWindowController"];
// Begin our sheet
[NSApp beginSheet: testingWindowController.window
modalForWindow: self.window
modalDelegate: self
didEndSelector: @selector(windowDidEnd:returnCode:contextInfo:)
contextInfo: NULL];
}
- (void)windowDidEnd:(id)alert returnCode:(NSInteger)returnCode contextInfo:(id) contextInfo
{
// If the user did not accept, then we really don't care what else they did!
if (returnCode != NSOKButton) return;
// We have had an error. Display it.
[[NSApplication sharedApplication] presentError: nil
modalForWindow: self.window
delegate: nil
didPresentSelector: nil
contextInfo: NULL];
}
以下动作与 Windows 笔尖上的按钮相关联。(请注意,笔尖的窗口也设置为在启动时不可见)。
- (IBAction) onClose: (id) sender
{
[[NSApplication sharedApplication] endSheet: self.window
returnCode: NSOKButton];
[self.window orderOut: nil];
} // End of onClose
最终发生的是,一旦我onClose
运行,所有窗口都消失了,我只剩下错误对话框(主窗口消失了)。
我的代码有问题吗?为什么我的主窗口消失了?
注意:我知道我没有将错误传递给 presentError 方法。我故意留下这个空值,因为我只有很短的时间来编写示例代码。传递实际错误会导致相同的行为。
示例项目可在此处获得。