Macos NSSharingService根据所选服务自定义项目列表

Macos NSSharingService根据所选服务自定义项目列表,macos,cocoa,Macos,Cocoa,我正在尝试在我的应用程序中添加一些基本的共享功能。 首先,我找到了NSSharingServicePicker类,它已经实现了共享菜单,并且可以为共享服务指定一个委托。 这个解决方案的问题是,我无法为不同的服务指定不同类型的项目。 例如:我想与电子邮件和Facebook共享一个“对象”。但在facebook上,我只想发布一个“标题”属性,而在电子邮件上,我想发布完整的对象 所以我想自己实现菜单,并使用nspoupbutton显示它。现在我拥有了所需的所有功能:因为我可以在NSSharingSer

我正在尝试在我的应用程序中添加一些基本的共享功能。 首先,我找到了
NSSharingServicePicker
类,它已经实现了共享菜单,并且可以为共享服务指定一个委托。 这个解决方案的问题是,我无法为不同的服务指定不同类型的项目。 例如:我想与电子邮件和Facebook共享一个“对象”。但在facebook上,我只想发布一个“标题”属性,而在电子邮件上,我想发布完整的对象

所以我想自己实现菜单,并使用
nspoupbutton
显示它。现在我拥有了所需的所有功能:因为我可以在
NSSharingService上调用
performwhitems:
,我可以指定项目。 但是当然有,但是。。。共享菜单可以嵌入到不同的窗口中。同时屏幕上可能有多个窗口,因此我不知道如何处理
NSSharingService
类的委托。目前,每个窗口都有一个菜单对象,用于创建和管理自己的服务数组。但这样打开窗口的速度非常慢(从可用性的角度来看,这是不可接受的)。我认为这是由于每次创建
NSSharingService
对象的
NSArray
造成的。如果我切换到
静态
数组,我不知道如何处理代理


有人对如何解决这个问题有什么想法吗。。最后,性能问题不是由
NSSharingService
菜单引起的。 然而,我完全重写了组件

我创建了一个singleton类,负责发布“对象”。此外,它还提供了创建菜单的方法(每次创建不同的菜单时…)

现在,每个窗口(控制器)向组件请求菜单并显示它。当用户选择一个选项时,窗口(控制器)就是代理,它知道显示哪个对象并必须共享。因此,它要求共享组件与所选服务共享它

唯一困难的部分是如何处理
NSSharingService
类的委托。我需要比从委托方法传递的输入参数更多的信息(只有在调用
performWithItems:
时才知道此信息)。因此,我所做的是将我共享的项目数组保存为字典中的一个键(确切地说是
NSCache
,目前没有限制),并将我以后需要的信息保存为值。在委托方法(共享成功和失败)中,我检索信息并从缓存中删除对象。 我不知道这是不是一个好的解决办法。。如果有人有其他想法,我愿意接受建议