从另一个NSAlert的didEndSelector调用NSAlert

时间:2009-10-10 05:11:03

标签: objective-c cocoa macos nsalert

我需要根据另一个NSAlert的回复提出一个NSAlert。但是,当我尝试从第一个的didEndSelector调用它时,会发生各种令人讨厌的事情(比如我的文档窗口消失,并且警告有关打印到控制台的排序问题)。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您要做的是“链接”警报。

要执行此操作,您需要在提醒窗口中调用orderOut:

这是文档:

  

如果要从中解除工作表   在alertDidEndSelector方法中   在模态代表执行之前   响应回报的行动   价值,发送orderOut :( NSWindow)来   通过发送获得的窗口对象   窗口到警报参数。这个   允许你链表,为   例如,通过解雇一张纸   在从内部展示下一个之前   alertDidEndSelector方法。注意   你应该小心不要打电话   orderOut:在其他地方的工作表上   在您的计划之前   调用alertDidEndSelector方法。

答案 1 :(得分:4)

有一种更简单的方法,只需在if语句中检查[runModal]的内容:

//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];
                }

希望有所帮助