相关疑难解决方法(0)

如何在macOS应用程序中从app注册服务?

我正在尝试实现一个上下文菜单项,在选择文本时将在服务中显示.例如,如果我在TextEdit中选择一个单词,我希望在上下文菜单中显示一个菜单项"Do my stuff",这将把所选单词提供给我的应用程序代码以供进一步处理.

通过谷歌搜索,我得出结论,我需要实现和注册服务.我试图遵循 提供服务 文档,但这似乎至少有点过时(更不用说在某些地方含糊不清).

根据我的理解,我能够做到以下几点:

我实现了服务对象:

import Foundation
import AppKit

class ContextualMenuServiceProvider {

    func importString(_ pasteBoard: Pasteboard, userData: String, error: String) {
         print(">>>> in import string from service consumer")
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Info.plist中为服务创建了一个条目:

    <key>NSServices</key>
    <array>
        <dict>
            <key>NSMenuItem</key>
            <dict>
                <key>default</key>
                <string>Import to $(PRODUCT_NAME)</string>
            </dict>
            <key>NSMessage</key>
            <string>importString</string>
            <key>NSPortName</key>
            <string>MyApp</string>
            <key>NSSendTypes</key>
            <array>
                <string>public.plain-text</string>
            </array>
        </dict>
    </array>
Run Code Online (Sandbox Code Playgroud)

最后,我尝试在AppDelegate中注册该服务.现在文档说要使用:

NSApp.setServicesProvider(encryptor)
// where encryptor is an object of my ContextualMenuServiceProvider
Run Code Online (Sandbox Code Playgroud)

但是,似乎NSApp没有setServicesProvider方法.我试着用:

 NSApp.servicesProvider = ContextualMenuServiceProvider()
Run Code Online (Sandbox Code Playgroud)

但是,这似乎也不起作用.

我通过从Xcode运行应用程序来测试它,然后,在应用程序运行时,我尝试在TextEdit中选择一些文本(它不应该仅限于TextEdit,我只是以它为例),然后右键单击我正在寻找我的菜单项目.这是行不通的.

我能够找到某种类似的SO问题(例如,创建一个os x服务,或者如何将菜单项添加到Delphi XE2中的Mac OS …

service xcode swift3 macos-sierra

4
推荐指数
1
解决办法
933
查看次数

标签 统计

macos-sierra ×1

service ×1

swift3 ×1

xcode ×1