2012-03-16 6 views
12

私は/起動されるのCocoaアプリはそうのようなInfo.plistファイルに登録されているカスタムスキームでURLを使用して活性化に取り組んでいます:アプリが起動されると、私の質問は、あるOS Xアプリケーションが登録されたURLスキームによって起動された場合、どのように完全な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がアプリを起動したのかをどのように伝えますか? iOSでは、UIApplicationDelegateの-application:openURL:sourceApplication:annotation:メソッドを使用すると、NSURLインスタンスが渡されるため、これは簡単です。

私はmyschemeのようなURLで自分のアプリにデータを渡すことができるようにしたい://は、あなたのアプリデリゲートの-applicationWillFinishLaunching:で素晴らしい/何か/

答えて

21

をしますか:

[[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

関連する問題