Frage

Ich versuche, zusammen eine einfache Fehlerberichterstattung Paket zu setzen. Wenn mein Hauptprogramm abstürzt, ist es ein Crashlog rettet, beginnt dann ein Reporter-Programm. Der Reporter Programm fragt den Benutzer, wenn er das Crash-Protokoll zu mir schicken kann, dann so tut. Ich verwende NSRunAlertPanel ein grundlegendes Meldungsfeld zu schaffen.

Aus irgendeinem Grund, dass Meldungsfeld auftauchend unter anderen Fenstern begraben, die offen sein kann. Führen Sie das Hauptpaket aus einem Finder-Fenster, es zeigt sich auf der Oberseite, zwingen sie zum Absturz zu bringen, der Reporter Fenster zeigt nach oben hinter das Finder-Fenster.

Warum ist das passiert und wie es gelöst werden?

Minimal Testfall:

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

Errichtet mit:

g++ test.mm -framework AppKit && ./a.out
War es hilfreich?

Lösung

Ich scheine mit einer Lösung zu haben, kommen aus vielen tangential bezogenen Webseiten destilliert:

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

Ich gebe nicht vor, dies zu verstehen - es ist Cargo-Kult-Programmierung vom Feinsten. Bessere Antworten oder Erklärungen, was jeder Schritt tut, würde sehr geschätzt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top