2012-01-27 217 views
1

我目前正在編寫一個應用程序來使用系統服務來導入圖像。Mac服務不能正常工作

我按照有關使用服務從Apple文檔中的所有步驟,

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

得到了蘋果的答案:(basicaly這將是更爲複雜做到這一點的NSViewController,所以我只是實現它在NSWindowController)

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

您的自定義類在應用程序的生命週期的早期調用了 - [NSApplication registerServicesMenuSendTypes:returnTypes:],就像在其初始化方法中一樣?

你說你期望-validRequestorForSendType:returnType:在窗口和視圖控制器(而不是窗口或視圖,本身)上被調用。但是,這不一定完成。根據文檔,該消息被髮送到響應者鏈中的對象,並且NSApplication被記錄爲將其發送給其委託人,並且NSWindow將其發送給其委託人。需要注意的是,窗口控制器不一定是它所控制的窗口的代表。有可能。這樣設置可能很常見。但它不是由框架自動完成的。所以,如果你想讓窗口控制器接收-validRequestorForSendType:returnType :,你需要確保它是窗口的委託。

我看不出任何暗示NSView會將該消息轉發給其控制器。當然,通用視圖沒有委託。即使對於那些具有委託的特定類型的視圖(例如NSTabView),也沒有任何將其-voiceRequestorForSendType:returnType視圖發送給其代表的文檔。所以,如果你想要一個視圖控制器接收-validRequestorForSendType:returnType:,你必須確保它在響應者鏈中(或者寫一個自定義視圖子類,專門將該消息轉發給它的控制器)。

相關問題