2012-03-16 2 views
12

은/지금처럼의 Info.plist 파일에 등록 된 사용자 정의 방식으로 URL을 사용하여 활성화 :등록 된 URL 스키마에 OS X 앱이 시작되면 어떻게 전체 URL에 액세스합니까? 내가 시작하는 코코아 응용 프로그램에서 일하고 있어요

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>Open myscheme:// URLs</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>myscheme</string> 
     </array> 
    </dict> 
</array> 

내 질문 앱이 출시되면 나 활성화 된 URL은 앱을 실행 한 URL이 무엇인지 어떻게 알 수 있습니까? iOS에서는 UIApplicationDelegate의 -application : openURL : sourceApplication : annotation : 메소드가 NSURL 인스턴스를 통과하기 때문에이 작업을 쉽게 수행 할 수 있습니다.

내가 myscheme 같은 URL을 내 응용 프로그램에 데이터를 전달 할 수 있도록하려면 : // 할 /에서

답변

21

/멋진 뭔가 앱 대리인의 -applicationWillFinishLaunching:, 수행

[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; 

그리고 handleAppleEvent:withReplyEvent:은 다음과 같아야합니다.

- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { 
    NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; 
    // do something with the URL string 
} 
+0

keyDirectObject 란 무엇이며 어디에 정의되어 있습니까? keyDirectObject의 가치가 무엇인지 이해하지 못합니다. 감사. – Joel

+1

나를 좋아해하는 사람들을 위해 "누락 된 심볼에 대한 구문 오류없이 keyDirectObject를 컴파일하는 방법은 무엇입니까?", AE/AppleEvents.h에 enum의 경우로 정의되어 있습니다. 어떻게 든 AE/AppleEvents.h는 앱에 직접 포함되지 않더라도 앱에 포함됩니다. – Joel