2009-09-02 27 views
7

Ho cercato di far funzionare NSServices per la mia applicazione di recente senza successo. L'ho configurato in base alla documentazione ma non appare nel menu servizi (tuttavia appare nella sezione delle scorciatoie da tastiera delle Preferenze di sistema come voce di menu del servizio) Comunque ho impostato il servizio nel mio controller dell'app come questo :NSServices non funzionanti

[NSApp setServicesProvider:self]; 

Il metodo esposto è:

- (void) addDownloadService:(NSPasteboard *)pboard 

    userData:(NSString *)userData error:(NSString **)error 

mio Info.plist appare allora come questo:

<key>NSServices</key> 
     <array> 
       <dict> 
         <key>NSReturnTypes</key> 
         <array> 
           <string></string> 
         </array> 
         <key>NSKeyEquivalent</key> 
         <dict> 
           <key>English</key> 
           <string>S</string> 
           <key>Key equivalent (with command and shift)</key> 
           <string>S</string> 
         </dict> 
         <key>NSSendTypes</key> 
         <array> 
           <string>NSStringPboardType</string> 
           <string>NSURLPboardType</string> 
           <string>NSRTFPboardType</string> 
         </array> 
         <key>NSPortName</key> 
         <string>MyApp</string> 
         <key>NSMessage</key> 
         <string>addDownloadService</string> 
         <key>NSMenuItem</key> 
         <dict> 
           <key>English</key> 
           <string>MyNewService</string> 
           <key>default</key> 
           <string> MyNewService </string> 
         </dict> 
       </dict> 
     </array> 

I Tri Ed in esecuzione il comando di debug con TextEdit in questo modo: /Applications/TextEdit.app/Contents/MacOS/TextEdit -NSDebugServices com.companyname.MyApp

che emette il seguente: MyNewService (com.companyname.MyApp) è disabilitata nel menu servizi e disabilitato nel menu di scelta rapida, secondo la politica servizi standard.

Qualche idea per cui potrebbe non funzionare?

Grazie Colin

risposta

8

Ho appena andato Trough lo stesso problema. Sembra che Snow Leopard disabiliti i servizi di terze parti per impostazione predefinita.

Devi aprire le Preferenze> Tastiera Seleziona la seconda scheda (qualcosa veloce, non ricordo in questo momento) seleziona i Servizi, cerca il tuo e attivalo.

Non c'è altra soluzione di cui sono a conoscenza.

4

Il fatto che si presenta in preferenze di sistema è buono. Ci sei quasi. Supponendo che tu l'abbia già abilitato nelle preferenze di sistema (una cosa buona da controllare molto velocemente, assicurati solo che ci sia un controllo accanto), il problema è molto probabilmente un problema con i tipi send e return.

OSX utilizza i tipi di invio e restituzione come suggerimenti per decidere quando/dove visualizzare il servizio. Ad esempio, se hai specificato un tipo di reso (come hai fatto qui) e il controllo che stai attivando il servizio da non sa cosa fare con il tipo di reso, allora il tuo servizio non verrà mostrato.

La guida di implementazione dei servizi mi ha dato qualche buona risoluzione dei problemi passaggi su come scoprire il motivo per cui i miei servizi non veniva visualizzato quando Recentemente ho avuto lo stesso problema (vedi: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SysServices/Articles/properties.html)

Se il servizio è riconosciuto da pbs, ma non appare nel menu Servizi , è possibile utilizzare l'utente predefinito NSDebugServices per aiutare a determinare il motivo.Ad esempio, per determinare il motivo per cui appaiono servizi di posta o non appaiono in TextEdit, è possibile avviare TextEdit con l'opzione NSDebugServices e passarlo l'identificatore fascio di Mail:

/Applications/TextEdit.app/Contents/MacOS/ TextEdit -NSDebugServices com.apple.mail

Quando ho fatto questo ho avuto un messaggio di errore bello per il mio propria applicazione:

MyExampleService (com.blah.example) è squalificato perché la sua inviare e/o tipo di reso s non può essere gestito dal richiedente < NSTextView: 0x7fb681c0e8a0 >

ho scoperto che il mio servizio si presentava se non ha specificato e tipo di ritorno, e il messaggio di errore mostra chiaramente che il tipo di ritorno è stato il problema nel mio caso. Penso che sia probabilmente il problema anche nel tuo caso dato che hai specificato un tipo di reso senza specificare nulla al suo interno.

Rimuovere il tipo restituito se non ci si aspetta nulla di nuovo, o se si desidera il ritorno di testo (ad esempio si desidera che il servizio sostituisca il testo all'interno di un NSTextView) Specificherei il tipo restituito come NSStringPboardType come segue :

    <key>NSReturnTypes</key> 
        <array> 
          <string>NSStringPboardType</string> 
        </array> 

Potrebbe esserci qualcosa di sbagliato anche nei tipi di invio, anche se non penso che ci sia. Puoi essere sicuro che se usi i passaggi di debug ti suggerisco di sapere perché il servizio non viene visualizzato.