Вызов NSAlert из didEndSelector другого NSAlert

Мне нужно вызвать NSAlert, основываясь на ответе другого NSAlert. Однако, когда я пытаюсь вызвать его из didEndSelector первого, происходят всевозможные неприятности (например, исчезновение окна моего документа и предупреждение о проблемах с печатью на консоль).

Какие-нибудь мысли?

2 ответа

Решение

То, что вы пытаетесь сделать, это "цепочка" оповещений.

Для этого нужно позвонить orderOut: в окне предупреждения.

Вот документация:

Если вы хотите удалить лист из метода alertDidEndSelector до того, как модальный делегат выполнит действие в ответ на возвращаемое значение, отправьте orderOut: (NSWindow) объекту окна, полученному путем отправки окна в аргумент alert. Это позволяет вам связывать листы, например, отклоняя один лист перед тем, как показывать следующий из метода alertDidEndSelector. Обратите внимание, что вы должны быть осторожны, чтобы не вызывать orderOut: на листе из другого места в вашей программе до вызова метода alertDidEndSelector.

Есть более простой способ, просто проверьте содержимое [runModal] в операторе if:

//setup the dialog
NSAlert *networkErrorDialog = [NSAlert alertWithMessageText:@"Couldn't connect to the server" defaultButton:@"Network Diagnostics" alternateButton:@"Quit" otherButton:nil informativeTextWithFormat:@"Check that your computer is connected to the internet and make sure you aren't using a proxy server or parental controls"];

//show the dialog inside an IF, 0=the first button 1=the 2nd button etc
                if ([networkErrorDialog runModal]==0) {
                    //quit
                    [[NSApplication sharedApplication] terminate:self];
                } else {
                    //Network Diagnostics
                    [[NSWorkspace sharedWorkspace] launchApplication:@"Network Diagnostics"];
                    [[NSApplication sharedApplication] terminate:self];
                }

надеюсь, это поможет

Другие вопросы по тегам