用NSPasteboard中的第二个最新项目替换最新项目

时间:2015-02-14 16:53:10

标签: macos cocoa clipboard nspasteboard

有没有办法从粘贴板中全局删除当前项目(在任何应用程序中按 Command + V 时显示的项目)并使其按下 Command + V 粘贴最后复制的项目?

说我复制foo然后bar,我按下我的应用中的一个按钮,从粘贴板中删除bar,现在如果我按 Command + V 任何地方(在任何应用程序中)我看到foo粘贴,bar无处可见,它已完全从用户的机器上消失。

1 个答案:

答案 0 :(得分:1)

不,你不能这样做。系统粘贴板没有任何“最近的粘贴板项目”机制。

事实上,复制的数据甚至不一定在粘贴板上。应用可以通过在可用类型列表中添加类型来“保证”粘贴板数据,但不会在其中放置任何数据。对象被注册为该类型的“所有者”。如果某个其他应用请求该类型的数据,则要求所有者在此时提供该数据。这尤其适用于粘贴板数据生成成本高昂,从源应用程序传输到粘贴板服务器并存储的情况。

因此,仅仅因为你在应用中复制了“foo”,这并不意味着“foo”曾经出现在粘贴板上。因此,没有办法回到在粘贴板上使用“foo”。

此外,当其他东西清除了粘贴板以在其上放置新数据时,所有承诺数据的所有者都会收到通知,以便他们可以清理他们可能记录的任何状态以实现该承诺。因此,即使源应用程序也无法在粘贴板上放置“bar”后提供“foo”。