1

GUI 앱이 아닌 경우 활성화 된 도우미 애플리케이션이 있습니다. 도우미 응용 프로그램이 [NSUserNotificationCenter defaultNotificationCenter]에 알림을 게시하고 있습니다. 사용자가 도우미로부터 알림을 활성화 할 때 GUI 응용 프로그램을 열어보고 싶습니다. 이것을 할 수있는 방법이 있습니까?NSUserNotification과 함께 주 앱을 열어 도우미로부터 게시했습니다

도우미 앱은 기본 앱과 동일한 이름으로 알림을 게시하지만 didActivateNotification을받는 것보다 문제가 적습니다 : 올바른 실행 파일로 보냈습니다.

답변

1

당신은 단순히 didActivateNotification: 위임 방법에 NSWorkspace를 통해 주요 응용 프로그램을 열 수 있습니다 : 그것은 실행되지 않는 경우

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification 
{ 
    [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:@"/Applications/TextEdit.app"] options:0 configuration:nil error:nil]; 
} 

이 지정된 URL에서 응용 프로그램을 열 것입니다, 또는 경우 포 그라운드로 가져 이미 열려있어.

주 앱의 대체 접근 방법은 register a custom URL scheme이며 NSWorkspace의 openURL을 사용하십시오. 이 방법을 사용하면 기본 동작에서 다른 동작을 유발하는 간단한 동작/매개 변수 문법을 정의 할 수 있습니다.

+0

첫째로, duh, 예, 도우미가 기본 앱을 실행하게하고, 그런 다음 doh, 런치 인자 또는 통지 정보를 전달하는 것을 전달해야합니다. 나는 도우미에게 알림을 게시하는 데 집착한다면 URL 스키마가 가장 사기성있는 방법이라고 생각합니다. 내가 끝내면 GUI 응용 프로그램을 닫을 때 백그라운드 모드로 들어가서 알림이있는 GUI를 다시 실행하는 방법을 파악하는 데 더 많은 노력을 기울였습니다. – stevesliva

1

게시 알림은 이러한 알림 수신을 위해 등록 된 실행중인 앱에서만 작동합니다.

GUI 응용 프로그램을 실행하려면 [[NSWorkspace sharedWorkSpace] launchApplication : pathToApplication];을 사용할 수 있습니다. pathToApplication을 정확하고 완전하게 설정해야합니다. 예 :/applications/the GUIapp

이 메소드는 도우미 응용 프로그램에 구현되어야하므로 사용자 활성화에 대한 대응도 구현해야합니다.

NSUserNoticationCenter에 대한 대리인을 설정 했으므로 userNotificationCenter : didActivateNotification : 을 수신했다고 가정합니다. 받고 당신이 응용 프로그램은 반응한다 정보로 공급 할 수있는 "사용자 정보"DICT에서 정보를 추출하는 방법을 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotificationCenterDelegate_Protocol/Reference/Reference.html#jumpTo_3 는 설명이 링크의 토론 부분은, 사용자 정보 https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/Reference.html#jumpTo_17

이 링크를 참조

NSUserNotifications를 사용하지 않았지만 NSUserNotificationCenter dismiss notification도 도움이 될 것입니다.

+0

감사. userInfo dict를 사용하고 있었기 때문에 도우미에서 GUI 응용 프로그램으로 전달하려고했습니다. 아아. – stevesliva