Objective c 如何知道另一个Cocoa应用程序何时将您放入的项目粘贴到通用粘贴板中

Objective c 如何知道另一个Cocoa应用程序何时将您放入的项目粘贴到通用粘贴板中,objective-c,macos,swift,cocoa,nspasteboard,Objective C,Macos,Swift,Cocoa,Nspasteboard,在Mac OS X应用程序(Cocoa)中,我正在将一个项目复制到通用粘贴板NSPasteboard.generalPasteboard()。当用户使用另一个应用程序粘贴数据时,该项使用实现协议的对象来提供数据 根据目标应用程序选择的类型,可以完成一些临时工作(如将文件写入临时文件) 是否有办法检测此操作何时完成或取消,以便我可以在删除之前创建的临时文件后进行一些清理 例如,我使用相同的数据提供程序来拖动复制/粘贴操作。采用NSDraggingSource协议,实现了 -DragingSessi

在Mac OS X应用程序(Cocoa)中,我正在将一个项目复制到通用粘贴板
NSPasteboard.generalPasteboard()
。当用户使用另一个应用程序粘贴数据时,该项使用实现协议的对象来提供数据

根据目标应用程序选择的类型,可以完成一些临时工作(如将文件写入临时文件)

是否有办法检测此操作何时完成或取消,以便我可以在删除之前创建的临时文件后进行一些清理

例如,我使用相同的数据提供程序来拖动复制/粘贴操作。采用
NSDraggingSource
协议,实现了


-DragingSession:endedAtPoint:operation:
以了解何时进行清洁。

为此,NSPasteboardItemDataProvider协议具有方法
-pasteboardFinishedWithDataProvider:
。它是为了给你一个清理的机会


出于某种原因,这还不够吗?

出于此目的,
NSPasteboardItemDataProvider
协议具有方法
-pasteboardFinishedWithDataProvider:
。它是为了给你一个清理的机会


出于某种原因,这还不够吗?

当粘贴板被另一个复制/粘贴操作获取时,可能是有人调用
pasteboard.clearContents()
时,该方法会被执行。如果可能的话,我希望在用户粘贴项目时收到通知(这可能会发生多次)。对于承诺的数据,该方法也将在首次粘贴项目时调用,因为一旦粘贴板服务器拥有数据,它就不再需要您的提供方。没有任何机制可以在每次粘贴数据时通知用户。一旦粘贴板服务器拥有数据,它将直接满足未来的数据请求,而不涉及你的应用程序。在你说的时候不会调用该方法,而是在其他进程清除粘贴板以执行操作时调用该方法。另外,您所做的另一个假设也是不正确的,因为数据提供程序可以提供多种类型,并且在复制后的每个粘贴操作中不必相同。如果没有调用它,则可能是做错了什么。从文档中可以看出:“当粘贴板的任何粘贴板项目不再需要数据提供程序时,就会调用此方法。这可能是因为数据提供程序已经履行了所有承诺,也可能是因为粘贴板的所有权发生了变化。”正如我在前面的评论中所说,当粘贴板的所有权发生变化时,总是调用它。复制某个内容时,如果提供程序允许,您可能希望在多个位置多次粘贴该内容,甚至使用不同的类型(事实就是如此)。当粘贴板被另一个复制/粘贴操作占用时,可能会在有人调用
粘贴板.clearContents()
时执行该方法。如果可能的话,我希望在用户粘贴项目时收到通知(这可能会发生多次)。对于承诺的数据,该方法也将在首次粘贴项目时调用,因为一旦粘贴板服务器拥有数据,它就不再需要您的提供方。没有任何机制可以在每次粘贴数据时通知用户。一旦粘贴板服务器拥有数据,它将直接满足未来的数据请求,而不涉及你的应用程序。在你说的时候不会调用该方法,而是在其他进程清除粘贴板以执行操作时调用该方法。另外,您所做的另一个假设也是不正确的,因为数据提供程序可以提供多种类型,并且在复制后的每个粘贴操作中不必相同。如果没有调用它,则可能是做错了什么。从文档中可以看出:“当粘贴板的任何粘贴板项目不再需要数据提供程序时,就会调用此方法。这可能是因为数据提供程序已经履行了所有承诺,也可能是因为粘贴板的所有权发生了变化。”正如我在前面的评论中所说,当粘贴板的所有权发生变化时,总是调用它。当您复制某个内容时,您可能希望在多个位置多次粘贴该内容,或者如果提供程序允许,甚至使用不同的类型(这种情况下)。