我为我的应用程序创建了一个服务,菜单显示正确,但是当菜单项被激活时,我仍然对调用的方法有问题。
在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添加新任务,获取所选文本并在应用程序中创建新任务。
我非常感谢帮助解决这个问题。
答案 0 :(得分:1)
这只是访问程序各个部分中对象的一般问题。有两种常规机制:从一个众所周知的对象开始,或者让你需要的对象通过知道这两个对象的代码部分传递给你。
例如,您可以使用NSApplication.sharedApplication().delegate
访问应用程序委托。然后,您可以将其转换为自定义应用程序委托类并访问其属性。
但是,如果有一个简单的替代方案,那么避免依赖伪全局变量可能会更好。为您的ServiceProvider
类提供必要的属性以跟踪它所需的对象(如应用程序委托)。在创建ServiceProvider
实例的app委托代码中,只需设置这些属性即可。这可能是在创建属性后设置属性的语句中,或者您可以将其作为参数传递给初始化方法。显然,你需要声明初始化方法来获取参数并将其存储在实例变量中。