Я сломал это в очень маленький проект. Используя следующий код в делегат приложения:Какао: сообщение об ошибке после 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];
}
и выполняет следующие действия, привязанных к кнопке на бобах окна. (Обратите внимание, что окно nib также установлено, чтобы оно не было видимым при запуске).
- (IBAction) onClose: (id) sender
{
[[NSApplication sharedApplication] endSheet: self.window
returnCode: NSOKButton];
[self.window orderOut: nil];
} // End of onClose
Что в конечном итоге происходит это, когда я в onClose
работает, все окна исчезают, и я остался ни с чем, но диалоговое окно ошибки (главное окно исчезло).
Что-то не в порядке с моим кодом? Почему мое главное окно уходит?
ПРИМЕЧАНИЕ. Я знаю, что я не передаю ошибку в метод presentError. Я намеренно оставил этот нуль, поскольку у меня было только короткое время, чтобы написать образец кода. Передача фактической ошибки приводит к такому же поведению.
Образец проекта доступен here.
Спасибо , но, к сожалению, это не решило проблему. Я попытался использовать методы 'beginSheet' и' EndSheet', но я все равно столкнулся с тем же. (Главное окно исчезает). – Kyle
@ Zenox: ваш отредактированный код по-прежнему показывает, что вы закрываете неправильное окно в методе onClose - testingWindowController.window - это лист, который вы хотите завершить, и закажите его не self.window – rdelmar
Метод onClose находится в TestingWindowController (его селектор для нажатия кнопки на панели). Так что self.window был бы правильным в этом контексте, не так ли? – Kyle