实现NSService方法

时间:2015-03-23 00:23:04

标签: xcode macos cocoa swift

我为我的应用程序创建了一个服务,菜单显示正确,但是当菜单项被激活时,我仍然对调用的方法有问题。

在AppDelegate.swift中我有:

func applicationDidFinishLaunching(aNotification: NSNotification) {
    NSApplication.sharedApplication().servicesProvider = ServiceProvider()
    NSUpdateDynamicServices();
}

ServiceProvider类是:

import Cocoa

class ServiceProvider {
    func serviceTest(pasteboard: NSPasteboard, userData: String, error: NSErrorPointer) {
        // code here
    }
}

当服务被激活时,我想向我的应用程序的组件发送一些信息,例如,更改标签的文本。我怎样才能做到这一点?我试图在函数serviceTest中获取mainWindow来访问它的组件,但是它返回了nil。

我正在尝试执行与您选择某些文本的Safari服务类似的操作,然后右键单击>服务>用谷歌搜索。这个打开Safari并搜索所选文本。或类似的东西,向Wunderlist添加新任务,获取所选文本并在应用程序中创建新任务。

我非常感谢帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

这只是访问程序各个部分中对象的一般问题。有两种常规机制:从一个众所周知的对象开始,或者让你需要的对象通过知道这两个对象的代码部分传递给你。

例如,您可以使用NSApplication.sharedApplication().delegate访问应用程序委托。然后,您可以将其转换为自定义应用程序委托类并访问其属性。

但是,如果有一个简单的替代方案,那么避免依赖伪全局变量可能会更好。为您的ServiceProvider类提供必要的属性以跟踪它所需的对象(如应用程序委托)。在创建ServiceProvider实例的app委托代码中,只需设置这些属性即可。这可能是在创建属性后设置属性的语句中,或者您可以将其作为参数传递给初始化方法。显然,你需要声明初始化方法来获取参数并将其存储在实例变量中。