2009-09-02 2 views
7

He intentado que NSServices funcione para mi aplicación recientemente sin éxito. Lo configuré de acuerdo con la documentación, pero no aparece en el menú de servicios (sin embargo, aparece en la sección de accesos directos de teclado de las Preferencias del sistema como un elemento del menú de servicio) De todos modos configuro el servicio en mi controlador de aplicación como este :NSServices no funciona

[NSApp setServicesProvider:self]; 

El método expuesto es:

- (void) addDownloadService:(NSPasteboard *)pboard 

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

Mi Info.plist continuación, se ve así:

<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 ejecutando el comando de depuración con textedit así: /Applications/TextEdit.app/Contents/MacOS/TextEdit -NSDebugServices com.companyname.MyApp

que emite el siguiente: MyNewService (com.companyname.MyApp) está desactivada en el menú de servicios y deshabilitado en el menú contextual, por la política de Servicios estándar.

¿Alguien alguna idea de por qué podría no estar funcionando?

Gracias Colin

Respuesta

8

que acaban de transcurrir Trough el mismo problema. Parece que Snow Leopard desactiva los servicios de terceros por defecto.

Debes abrir las Preferencias> Teclado Selecciona la segunda pestaña (algo rápido, no recuerdo ahora) selecciona los Servicios, busca los tuyos y actívalos.

No hay otra solución que yo sepa.

4

El hecho de que aparezca en las preferencias del sistema es buena. Ya casi has llegado. Suponiendo que ya lo tiene habilitado en las preferencias del sistema (lo bueno es verificar muy rápido, solo asegúrese de que haya una marca al lado), el problema probablemente sea un problema con los tipos de envío y/o devolución.

OSX utiliza los tipos de envío y devolución como sugerencias para decidir cuándo/dónde mostrar el servicio. Por ejemplo, si ha especificado un tipo de devolución (como lo ha hecho aquí) y el control del que está activando el servicio no sabe qué hacer con el tipo de devolución, entonces su servicio no se mostrará.

la guía de implementación de servicios me dio una buena solución de problemas pasos sobre cómo descubrir por qué mis servicios no se está visualizando cuando recientemente he tenido el mismo problema (véase: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SysServices/Articles/properties.html)

Si su servicio es reconocido por pbs, pero no aparece en el menú de servicios , puede usar el usuario de NSDebugServices predeterminado para ayudar a a determinar por qué.Por ejemplo, para determinar por qué los servicios de correo aparecen o no aparecen en edición de textos, puede iniciar con la opción de edición de textos NSDebugServices y pasarlo el identificador de paquete de correo:

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

Cuando hice esto tengo un mensaje de error agradable para mi propia aplicación:

MyExampleService (com.blah.example) es descalificado porque su y enviar/o tipo de devolución s no puede ser manejada por el solicitante < NSTextView: 0x7fb681c0e8a0 >

me encontré con que mi servicio aparecería si no se ha especificado y el tipo de retorno, y el mensaje de error muestra claramente que el tipo de retorno era el problema en mi caso. Creo que probablemente sea también el problema en su caso, ya que ha especificado un tipo de devolución sin especificar nada dentro de este.

Elimine el tipo de devolución si no espera recuperar nada, o si desea devolver el texto (por ejemplo, desea que su servicio reemplace el texto dentro de un NSTextView) especificaría el tipo de devolución como NSStringPboardType de la siguiente manera :

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

También puede haber algún problema con los tipos de envío, aunque no creo que exista. Puede estar seguro de que si utiliza los pasos de depuración, le sugerí que se le diga por qué el servicio no se muestra.