2012-01-27 119 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:,你必须确保它在响应者链中(或者写一个自定义视图子类,专门将该消息转发给它的控制器)。

相关问题