我已經把它分解成一個非常小的項目。在應用程序代理中使用以下代碼:Cocoa:在NSApp beginSheet結果隱藏主窗口後顯示一個錯誤
- (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 nib上的按鈕。 (請注意,筆尖的窗口也設置爲在啓動時不可見)。
- (IBAction) onClose: (id) sender
{
[[NSApplication sharedApplication] endSheet: self.window
returnCode: NSOKButton];
[self.window orderOut: nil];
} // End of onClose
什麼結束了發生的事情是,有一次我的onClose
運行,所有窗口的消失,我一無所有,但錯誤對話框(主窗口已經消失)。
我的代碼有問題嗎?爲什麼我的主窗口消失?
注意:我知道我沒有將錯誤傳遞給presentError方法。我故意留下這個空值,因爲我只有很短的時間來編寫示例代碼。傳遞實際錯誤會導致相同的行爲。
示例項目可用here。
謝謝(取消發射時的UserLoginWindowController窗口總是可見)
,但不幸的是它並沒有解決問題。我嘗試過使用'beginSheet'和'endSheet'方法,但我仍然遇到同樣的問題。 (主窗口消失)。 – Kyle
@Zenox:編輯過的代碼仍然顯示你在onClose方法中關閉了錯誤的窗口 - testingWindowController.window是你想要結束的表單,並且不是self.window – rdelmar
onClose方法在TestingWindowController中(它的點擊面板上按鈕的選擇器)。所以self.window將適合這種情況下,它會不會? – Kyle