Вызов NSAlert из didEndSelector другого NSAlert - PullRequest
2 голосов
/ 10 октября 2009

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

Есть мысли?

Ответы [ 2 ]

5 голосов
/ 10 октября 2009

То, что вы пытаетесь сделать, это "связать" предупреждения.

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

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

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

4 голосов
/ 11 октября 2009

Существует более простой способ, просто проверьте содержимое [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];
                }

Надеюсь, что поможет

...