Вопрос

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

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

Это было полезно?

Решение

То, что вы пытаетесь сделать, - это «цеповать» оповещения.

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top