我正在尝试整理一个简单的错误报告包。如果我的主程序崩溃,它会保存崩溃日志,然后启动报告程序。报告程序询问用户是否可以将崩溃日志发送给我,然后就这样做了。我正在使用 NSRunAlertPanel 创建一个基本消息框。
由于某种原因,该消息框显示在任何其他可能打开的窗口下方。从 Finder 窗口运行主包,它显示在顶部,强制它崩溃,报告器窗口显示behindFinder 窗口。
为什么会发生这种情况,如何解决?
最小测试用例:
#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];
}
我并不假装理解这一点——这是最好的货物崇拜编程。更好的答案或每个步骤的作用的解释将不胜感激。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)