2016-02-15 14 views
3

Я хочу получать уведомления о запуске приложения на Mac OSX. Я нашел Cocoa Application Finished Launch и, похоже, ответил на мой вопрос, но метод обратного вызова appDidLaunch не вызывается при запуске Preview get.Получить уведомление о запуске приложения в OSX

Вот что я до сих пор,

#import <Foundation/Foundation.h> 
#import <Appkit/Appkit.h> 

@interface test_case: NSObject 
-(void)run; 
@end 

@implementation test_case: NSObject 

- (void)appDidLaunch:(NSNotification*)note 
{ 
    NSLog(@"app launched: %@", [note userInfo]); 
} 

-(void)run { 
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(appDidLaunch:) name:NSWorkspaceDidLaunchApplicationNotification object:nil]; 

    [[NSWorkspace sharedWorkspace] openFile:@"/Users/nah/Desktop/bsd_hacks.pdf" 
     withApplication:@"Preview"]; 
} 

@end 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 

     test_case * t = [[test_case alloc] init]; 

     [t run]; 
    } 
    return 0; 
} 

Так почему appDidLaunch не вызывается?

ответ

3

Ваше приложение завершает выполнение (выход main функция), прежде чем у вас есть возможность получить уведомление. Кроме того, вам нужно правильно настроить основной цикл запуска для обработки уведомлений. Обычно вызов NSApplicationMain выполняет все настройки приложения для вас. Таким образом, самый простой способ исправить проблему - следующее изменение в функции main:

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     test_case * t = [[test_case alloc] init]; 
     [t run]; 
     return NSApplicationMain(argc, argv); 
    } 
}