2009-09-02 2 views
7

저는 최근에 성공하지 못한 상태에서 NSServices를 사용하려고했습니다. 설명서에 따라 설정했지만 서비스 메뉴에 나타나지 않습니다 (그러나 시스템 환경 설정의 키보드 단축키 섹션에 서비스 메뉴 항목으로 나타남) 어쨌든이 앱 컨트롤러에서 서비스를 다음과 같이 설정했습니다. :NSServices가 작동하지 않습니다.

[NSApp setServicesProvider:self]; 

노출하는 방법은 다음과 같습니다

- (void) addDownloadService:(NSPasteboard *)pboard 

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

내 Info.plist 파일은 다음과 같습니다

<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 트라이 다음 출력 /Applications/TextEdit.app/Contents/MacOS/TextEdit -NSDebugServices com.companyname.MyApp

: MyNewService을 (com.companyname.MyApp)는 비활성화 에드과 같이 텍스트 편집기로 디버그 명령을 실행 서비스 메뉴에서는 컨텍스트 메뉴에서 비활성화되고 표준 서비스 정책에 의해 비활성화됩니다.

아무 이유없이 작동하지 않는 사람은 누구입니까?

감사 콜린

답변

8

난 그냥 같은 문제 물마루 갔다. Snow Leopard는 기본적으로 타사 서비스를 비활성화합니다.

환경 설정> 키보드를 열어야합니다. 빠른 두 번째 탭을 선택하십시오. (당장은 기억이 나지 않습니다.) 서비스를 선택하고 자신을 찾고 활성화하십시오.

내가 알고있는 다른 해결책이 없습니다.

4

이 좋은 시스템 환경 설정에 표시한다는 사실을 참조하십시오. 너 거의 다 왔어. 시스템 환경 설정에서 이미 활성화했다고 가정하면 (정말로 빠르게 점검하고, 옆에 체크가되어 있는지 확인하는 것이 좋습니다), 문제는 send 및 return 유형의 문제 일 가능성이 큽니다.

OSX는 서비스를 표시 할시기와 위치를 결정하기위한 힌트로 보내기 및 반환 유형을 사용합니다. 예를 들어, 반환 유형을 지정한 경우 (여기에서와 같이) 서비스를 활성화하는 컨트롤에서 반환 유형을 사용하여 수행 할 작업을 모르는 경우 서비스가 표시되지 않습니다.

하는 서비스 구현 가이드는 나에게 내가 최근에 같은 문제가 있었을 때 내 서비스가 표시되지 않는 이유를 발견하는 방법에 대한 단계를 촬영 좋은 문제 하였다 (참조 : https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SysServices/Articles/properties.html를)

당신의 서비스에 의해 인식되면 pbs,하지만 서비스 메뉴에 나타나지 않는 경우 NSDebugServices 사용자 기본값을 사용하여 이유를 확인할 수 있습니다.예를 들어, 메일의 서비스가 나타나지 이유를 확인하거나 당신이 NSDebugServices 옵션을 사용하여 텍스트 편집기를 시작하고 그것에게 메일의 번들 식별자 전달할 수 있습니다, 텍스트 편집기에 표시되지 않습니다 :

/Applications/TextEdit.app/Contents/MacOS/을 내가 이런 짓을 할 때 텍스트 편집기 -NSDebugServices이

com.apple.mail 난 내 자신의 응용 프로그램에 대한 좋은 오류 메시지를 받았습니다 : 그 를 보낼 수 있기 때문에

MyExampleService (com.blah.example) 자격이 박탈되며,/또는 반환 유형 (S)는 요청자 <를 NSTextView에서 처리 할 수 ​​없습니다 : 0x7fb681c0e8a0 >

은 내가 지정하고 형식을 반환하고, 오류 메시지가 명확하게 반환 형식이 문제라고 표시하지 않은 경우 내 서비스가 보여줄 것을 발견 나의 경우에는. 내 생각 엔 내부에서 아무 것도 지정하지 않고 반환 유형을 지정 했으므로 아마도 문제가 될 수 있습니다.

아무 것도 기대하지 않거나 텍스트를 원한다면 (예 : 서비스가 NSTextView 내부의 텍스트를 바꾸기를 원할 경우) 다음과 같이 NSStringPboardType으로 반환 유형을 지정합니다 :

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

송신 유형에는 문제가있을 수 있지만 생각하지는 않습니다. 디버깅 단계를 사용하면 서비스가 표시되지 않는 이유를 알 수 있다고 제안 할 수 있습니다.

관련 문제