我目前正在编写一个应用程序来使用系统服务来导入图像。
我已遵循Apple文档中有关使用服务的所有步骤,
但它不起作用。
我有一个NSViewController并放
"[NSApp registerServicesMenuSendTypes:returnTypes:...]"
在“initialize”函数中,并覆盖这些函数:'validRequestorForSendType', 'readSelectionFromPasteboard', 'writeSelectionToPasteboard'
。
我启动应用程序后调用了"registerServicesMenuSendTypes:returnTypes"
,但没有调用任何其他应用程序,也没有更改服务菜单。
任何人都可以帮我这个或者给我一个很好的例子来看看吗?
非常感谢。
答案 0 :(得分:1)
得到了苹果公司的答案:(基本上,在NSViewController中执行此操作会更复杂,所以我只是在NSWindowController中实现它)
=============================================== ==============================
您的自定义类是否在应用程序生命周期的早期调用了[NSApplication registerServicesMenuSendTypes:returnTypes:],就像在他们的+ initialize方法中一样?
你说你期待-validRequestorForSendType:returnType:在你的窗口上调用并查看控制器(而不是窗口或视图本身)。但是,这不一定完成。根据文档,该消息被发送到响应者链中的对象,并且NSApplication被记录为将其发送给其委托,而NSWindow将其发送给其委托。重要的是要注意窗口控制器不一定是它控制的窗口的委托。有可能。以这种方式设置它可能是常见的。但它不是由框架自动完成的。因此,如果您希望窗口控制器接收-validRequestorForSendType:returnType:,则需要确保它是窗口的委托。
我没有看到任何迹象表明NSView会将该消息转发给其控制器。当然,通用视图没有委托。即使对于那些具有委托的特定类型的视图(例如NSTabView),也没有文档可以将-validRequestorForSendType:returnType:发送给他们的委托。因此,如果您希望视图控制器接收-validRequestorForSendType:returnType:,则必须确保它位于响应程序链中(或者编写一个专门将该消息转发给其控制器的自定义视图子类)。