2010-04-14 5 views
2

간단한 오류보고 패키지를 작성하려고합니다. 내 메인 프로그램이 충돌하면 크래시 로그를 저장 한 다음 리포터 프로그램을 시작합니다. 기자 프로그램은 사용자에게 충돌 로그를 보낼 수 있는지 묻고, 그렇게합니다. NSRunAlertPanel을 사용하여 기본 메시지 상자를 만듭니다.NSRunAlertPanel이 "활성 창"뒤에 표시됩니다.

메시지 상자가 열려있을 수있는 다른 창 아래에 묻혀 표시됩니다. 파인더 창에서 주 패키지를 실행하면 맨 위에 표시되고 강제로 중단됩니다. 기자 창이 파인더 창 뒤에 으로 나타납니다.

왜 이런 일이 발생하며 어떻게 해결 될 수 있습니까?

최소한의 테스트 케이스 :

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

:

g++ test.mm -framework AppKit && ./a.out 

답변

2

내가 많은 접선 방향으로 관련 웹 페이지에서 증류 해결책을 온 것 같다 :

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

함께 내장 나는 이것을 이해하려고하는 척하지 않습니다. 가장 훌륭한화물 컬트 프로그래밍입니다. 더 나은 답이나 각 단계의 설명이 크게 감사 할 것입니다.

+0

응용 프로그램이 앞으로 나옵니다. 왜 이벤트 루프없이 메인에서 이것을하고 있는지, 나는 잘 모른다. –

+0

"응용 프로그램"은 사용자에게 단일 질문을하고 컬을 통해 몇 가지 간단한 HTTP 요청을 수행하고 사용자에게 짧은 메시지를 전달하는 150 행 프로그램입니다. 본격적인 GUI가 정말로 필요하지 않으며 원하는 것도 아닙니다. 가능한 한 크로스 플랫폼으로 유지하고 싶습니다. 실제로 필요한 것은 Windows MessageBox()와 같습니다. – ZorbaTHut

+0

실제로 원하는 것은 중요하지 않습니다. 프레임 워크는 이벤트 루프를 기대합니다. 이 대회에 반대하는 투쟁은 완전한 시간 낭비 일 것입니다. –

관련 문제