我试图把一个简单的错误报告包。如果我的主要程序崩溃,它节省了系统崩溃日志,然后开始一个记者计划。记者程序会询问用户是否能崩溃日志发送给我,然后这样做。我使用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];
} 
在其最好的它的货物崇拜编程 -

我不假装理解这一点。更好的答案,或什么各步骤做解释,将不胜感激。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top