NSRunAlertPanel显示了“活动窗口”的背后
-
26-09-2019 - |
题
我试图把一个简单的错误报告包。如果我的主要程序崩溃,它节省了系统崩溃日志,然后开始一个记者计划。记者程序会询问用户是否能崩溃日志发送给我,然后这样做。我使用NSRunAlertPanel创建一个基本消息框。
出于某种原因,该消息框显示出来掩埋任何其他窗户可以是开放的下方。运行从Finder窗口主包,它显示了在上面,迫使它崩溃,记者窗口显示向上后面 Finder窗口。
为什么会出现这种情况,和怎么能解决呢?
最小测试用例:
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
内置有:
g++ test.mm -framework AppKit && ./a.out
解决方案
我似乎有拿出一个解决方案,从许多切向相关网页蒸馏:
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
[NSApp activateIgnoringOtherApps:YES];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
在其最好的它的货物崇拜编程 - 我不假装理解这一点。更好的答案,或什么各步骤做解释,将不胜感激。
不隶属于 StackOverflow