gpt4 book ai didi

xcode - 实现 NSService 方法

转载 作者:可可西里 更新时间:2023-11-01 02:23:34 29 4
gpt4 key购买 nike

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

在 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 并搜索所选文本。或者类似于将新任务添加到奇妙 list 的东西,获取所选文本并在应用程序中创建新任务。

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

最佳答案

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

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

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

关于xcode - 实现 NSService 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201546/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com