我正在尝试在我的应用程序中添加一些基本的共享功能。首先,我发现了NSSharingServicePicker类,它已经实现了共享菜单,并且可以为共享服务指定一个委托。这个解决方案的问题是,我无法为不同的服务指定不同类型的项目。例如:我想和电子邮件和Facebook分享一个“对象”。但在facebook上,我只想发布一个“标题”属性,而在电子邮件中,我只想完整地发布这个对象。
因此,我想实现自己的菜单,并显示它使用NSPopUpButton。现在我有了所需的所有功能:因为我可以在一个performWithItems:上调用NSSharingService,所以我可以指定条目。但是..。当然有一个但是..。共享菜单可以嵌入到不同的窗口中。同时屏幕上可以有多个窗口,所以我不知道如何处理NSSharingService类的委托。目前,每个窗口都有一个菜单对象,它创建和管理自己的服务数组。但在这种情况下,窗口的打开非常缓慢(从可用性的角度来看,这是不可接受的)。我认为这是因为每次创建NSArray of NSSharingService对象。如果切换到static数组,我不知道如何处理委托。
有人对如何解决这个问题有什么想法吗?
发布于 2014-01-04 19:01:35
所以..。最后,性能问题不是由NSSharingService菜单引起的。尽管如此,我还是完全重写了组件。
我创建了一个单例类,它负责发布“对象”。此外,它还提供了创建菜单的方法(每次都有不同的菜单.)。
现在,每个窗口(控制器)要求组件提供一个菜单并显示它。当用户选择一个选项时,窗口(控制器)是委托,它知道显示的是哪个对象,并且必须共享。因此,它要求共享组件与所选服务共享它。
唯一困难的部分是如何处理NSSharingService类的委托。我需要比从委托方法传递的输入参数更多的信息(只有当我调用performWithItems:时才知道此信息)。因此,我所做的就是将我共享的项数组保存为字典中的键(准确地说,是一个NSCache,目前没有限制),以及我以后需要的信息作为一个值。在委托方法(共享成功和失败)中,我检索信息并从缓存中删除对象。我不知道这是不是个好办法..。如果有人有其他想法,我愿意接受建议。
https://stackoverflow.com/questions/20901386
复制相似问题