我正在使用基于Apple示例代码的简单NSAlert,虽然显示效果很好,但它永远不会消失。
代码:
void DisplayAlert()
{
NSAlert *alert = [[NSAlert alloc] init];
NSLog(@"TEST");
[alert addButtonWithTitle:@"OK"];
[alert setMessageText:@"Yay!"];
[alert setInformativeText:@"This is an informational alert."];
[alert setAlertStyle:NSAlertStyleInformational];
[alert runModal];
NSLog(@"TEST2");
[alert.window close];
[alert release];
NSLog(@"TEST3");
}
我已尝试使用和不使用[alert.window close]
行,警报也不会消失。
我也试过制作第一行[[[NSAlert alloc] init] autorelease];
,但这也无济于事。
显示所有NSLog
条消息。
答案 0 :(得分:1)
我也遇到了同样的问题,努力了很长时间,试图找到一种方法使消失的警报消失。
我的解决方案是完全放弃NSAlert,转而使用CFUserNotificationAlert。 This blocking alert API或non-blocking CFUserNotificationNotice API可用于显示与NSAlert生成的对话框相同的独立警报对话框,但是当从简单的无窗口二进制文件运行时,可以与NSAlert对话框不同地将其关闭。
Here's an example of CFUserNotificationDisplayAlert和下面的一些代码预览:
#import <CoreFoundation/CoreFoundation.h>
int main(void) {
CFOptionFlags cfRes;
//display alert with 5 second timeout, at NoteAlertLevel
CFUserNotificationDisplayAlert(5, kCFUserNotificationNoteAlertLevel,
NULL, NULL, NULL,
CFSTR("Testing"),
CFSTR("Click on any button..."),
CFSTR("OK"),
CFSTR("Cancel"),
CFSTR("Test Button"),
&cfRes);
return cfRes;
}
答案 1 :(得分:-1)
您需要的方法是-orderOut:
而不是-close
。警报/面板窗口不是文档,不是&#34;关闭&#34;通常意义上讲。你就是他们消失的东西。