2012-01-27 8 views
1

現在、システムサービスを使用して画像をインポートするアプリを作成しています。Macサービスが動作しない

私が使用したサービスについて、アップルのドキュメントからすべての手順に従っている

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SysServices/Articles/using.html#//apple_ref/doc/uid/20000854-CEGDDHJJ

が、それは動作しませんでした。

私はNSViewControllerを持っており、 "初期化" 機能で

"[NSApp registerServicesMenuSendTypes:returnTypes:...]"

を入れて、これらの機能を上書き:'validRequestorForSendType', 'readSelectionFromPasteboard', 'writeSelectionToPasteboard'

"registerServicesMenuSendTypes:returnTypes"は、私がアプリケーションを起動した後に呼び出されましたが、他のメニューは呼び出されず、サービスメニューも変更されませんでした。

誰もがこれを手伝ったり、見て良い例を教えてもらえますか?

ありがとうございます。

答えて

1

はappleから答えを得た:(basicaly NSViewControllerでこれを行うには、より複雑になるので、私はちょうどNSWindowControllerの中でそれを実装)

============= ========================================== ==============

あなたのカスタムクラスは+ initializeメソッドのように、アプリケーションライフタイムの早い段階で - [NSApplication registerServicesMenuSendTypes:returnTypes:]を呼び出しましたか?

あなたは、あなたのウィンドウとビューコントローラで(ウィンドウやビュー自体ではなく)呼び出されることを期待しています - invalidRequestorForSendType:returnType:しかし、必ずしもそうではありません。ドキュメンテーションによると、そのメッセージはレスポンダチェーンのオブジェクトに送られます。さらに、NSApplicationはデリゲートにそれを送るものとして文書化され、NSWindowはデリゲートにそれを送信します。ウィンドウコントローラは、必ずしもウィンドウコントロールの代理人ではないことに注意することが重要です。かもね。そのように設定するのが一般的かもしれません。しかし、それはフレームワークによって自動的には行われません。したがって、ウィンドウコントローラが-validRequestorForSendType:returnType:を受け取るようにするには、それがウィンドウのデリゲートであることを確認する必要があります。

NSViewがそのメッセージをコントローラに転送することは何も示唆していません。確かに、汎用ビューにはデリゲートがありません。デリゲート(たとえばNSTabView)を持つビューの特定のタイプの場合でも、-validRequestorForSendType:returnType:をデリゲートに送信するドキュメントはありません。したがって、View Controllerが-validRequestorForSendType:returnType:を受け取るようにするには、レスポンダチェーンにあることを確認する必要があります(または、コントローラにそのメッセージを転送するカスタムビューサブクラスを作成する必要があります)。

関連する問題