objective-c - Mac 服务无法运行

标签 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”,但其他任何一个都没有被调用,服务菜单也没有更改。

有人可以帮我解决这个问题或者给我一个很好的例子吗?

非常感谢。

最佳答案

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

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

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

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

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

关于objective-c - Mac 服务无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034374/

相关文章:

objective-c - 从 USB MIDI 键盘获取 MIDI,cocoa mac

bash - 在 macOS 上的 Bash shell 脚本中查找当前鼠标坐标

macos - 在 mac os x 上分析 c++

objective-c - 使用 Objective-C 将值从一个对象传递到另一个对象

image - 从 Base64 编码的字符串加载图像

带有 UIButton 的 iPhone 设置包

ios - 自定义 UITableViewCell 仅在 iPhone5 上限制用户触摸响应

ios - 以编程方式从 Facebook 注销 iOS

macos - 删除.git/index.lock' : Permission denied

objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图