2012-03-16 8 views
12

Sto lavorando su un'applicazione Cocoa che viene lanciato/attivato utilizzando gli URL con uno schema personalizzato che è registrato nel file Info.plist in questo modo:Quando un'app OS X viene avviata da uno schema URL registrato, come si accede all'URL completo?

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

La mia domanda è, una volta che l'applicazione viene avviata o attivato, come faccio a sapere qual è l'URL che ha lanciato l'app? Su iOS, questo è facile con -application: openURL: sourceApplication: annotation: metodo su UIApplicationDelegate poiché è passato un'istanza NSURL.

Voglio essere in grado di passare nei dati nella mia app con gli URL come myscheme: // fare/cosa/impressionante

risposta

21

Nella vostra applicazione del delegato -applicationWillFinishLaunching:, fare:

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

E handleAppleEvent:withReplyEvent: dovrebbe essere simile a:

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

Che cos'è keyDirectObject e dove viene definito? Non capisco quale dovrebbe essere il valore di keyDirectObject. Grazie. – Joel

+1

Per coloro che si stanno chiedendo come me, "Come si compila keyDirectObject senza l'errore di sintassi per un simbolo mancante?", È definito in AE/AppleEvents.h come caso enumerativo. In qualche modo AE/AppleEvents.h viene incluso nella tua app anche se non lo includi direttamente. – Joel

Problemi correlati