我目前正在编写一个使用系统服务导入图像的应用程序。
我遵循了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"
,但没有其他任何调用,服务菜单也未更改。
谁能帮我这个忙,或者给我一个好的榜样看一下?
非常感谢。
最佳答案
从苹果那里得到了答案:(基本上,在NSViewController中执行此操作会更加复杂,因此我只是在NSWindowController中实现它)
================================================== ==========================
您的自定义类是否在应用程序的生命周期的早期就调用了[NSApplication registerServicesMenuSendTypes:returnTypes:],例如其+ initialize方法?
您说您希望在窗口和视图控制器(而不是窗口或视图本身)上调用-validRequestorForSendType:returnType:。但是,并不一定要这样做。根据文档,该消息被发送到响应者链中的对象,加上NSApplication被记录为将其发送给其委托人,而NSWindow将其发送给其委托人。重要的是要注意,窗口控制器不一定是它控制的窗口的委托。有可能。以这种方式进行设置可能很常见。但这不是由框架自动完成的。因此,如果您希望窗口控制器接收-validRequestorForSendType:returnType :,则需要确保它是窗口的委托。
我没有看到任何暗示NSView会将消息转发到其控制器的信息。当然,通用视图没有委托。即使对于确实具有委托的那些特定类型的视图(例如NSTabView),也没有文档将视图发送-validRequestorForSendType:returnType:给其委托。因此,如果您希望视图控制器接收-validRequestorForSendType:returnType :,则必须确保它在响应者链中(或编写一个自定义视图子类,该子类专门将该消息转发到其控制器)。