【问题标题】:Mac services not workingMac 服务不工作
【发布时间】:2012-02-02 22:34:09
【问题描述】:

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

我已按照 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",但没有调用其他任何一个,服务菜单也没有更改。

谁能帮我解决这个问题或给我一个很好的例子来看看?

非常感谢。

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2016-09-19
      • 1970-01-01
      • 2018-05-18
      相关资源
      最近更新 更多