Mac服务不起作用

时间:2012-01-27 14:03:13

标签: objective-c macos cocoa

我目前正在编写一个应用程序来使用系统服务来导入图像。

我已遵循Apple文档中有关使用服务的所有步骤,

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

但它不起作用。

我有一个NSViewController并放

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

在“initialize”函数中,并覆盖这些函数:'validRequestorForSendType', 'readSelectionFromPasteboard', 'writeSelectionToPasteboard'

我启动应用程序后调用了"registerServicesMenuSendTypes:returnTypes",但没有调用任何其他应用程序,也没有更改服务菜单。

任何人都可以帮我这个或者给我一个很好的例子来看看吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

得到了苹果公司的答案:(基本上,在NSViewController中执行此操作会更复杂,所以我只是在NSWindowController中实现它)

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

您的自定义类是否在应用程序生命周期的早期调用了[NSApplication registerServicesMenuSendTypes:returnTypes:],就像在他们的+ initialize方法中一样?

你说你期待-validRequestorForSendType:returnType:在你的窗口上调用并查看控制器(而不是窗口或视图本身)。但是,这不一定完成。根据文档,该消息被发送到响应者链中的对象,并且NSApplication被记录为将其发送给其委托,而NSWindow将其发送给其委托。重要的是要注意窗口控制器不一定是它控制的窗口的委托。有可能。以这种方式设置它可能是常见的。但它不是由框架自动完成的。因此,如果您希望窗口控制器接收-validRequestorForSendType:returnType:,则需要确保它是窗口的委托。

我没有看到任何迹象表明NSView会将该消息转发给其控制器。当然,通用视图没有委托。即使对于那些具有委托的特定类型的视图(例如NSTabView),也没有文档可以将-validRequestorForSendType:returnType:发送给他们的委托。因此,如果您希望视图控制器接收-validRequestorForSendType:returnType:,则必须确保它位于响应程序链中(或者编写一个专门将该消息转发给其控制器的自定义视图子类)。