سؤال

أحاول تجميع حزمة الإبلاغ عن خطأ بسيط. إذا تعطل البرنامج الرئيسي ، فإنه يحفظ Crashlog ، ثم يبدأ برنامج مراسل. يسأل برنامج المراسل المستخدم إذا كان بإمكانه إرسال سجل التصادم إلي ، ثم يفعل ذلك. أنا أستخدم nsrunalertpanel لإنشاء مربع رسالة أساسي.

لسبب ما ، يظهر مربع الرسائل هذا المدفون أسفل أي نوافذ أخرى قد تكون مفتوحة. قم بتشغيل الحزمة الرئيسية من نافذة 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