2015-09-05 53 views
0

在Mac OS X应用程序(Cocoa)中,我正在将项目复制到常规粘贴板NSPasteboard.generalPasteboard()中。该项目利用实施协议NSPasteboardItemDataProvider的对象在用户使用其他应用程序粘贴数据时提供数据。如何知道另一个Cocoa应用程序何时粘贴到通用粘贴板中的项目

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

有没有办法来检测何时该操作完成或取消,所以我可以做一些清理后(作为删除以前创建的临时文件)?

作为示例,我使用相同的数据提供程序来拖放复制/粘贴操作。采用NSDraggingSource协议,我执行方法 - draggingSession:endedAtPoint:operation:知道何时进行清洁。

回答

0

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

这是不是因为某种原因不够?

+0

当粘贴板被另一个复制/粘贴操作占用时,可能在有人调用'pasteboard.clearContents()'时执行该方法。如果可能,我希望在用户粘贴该项目时得到通知(这可能会发生多次)。 – Daniel

+0

对于承诺的数据,该方法也会在第一次粘贴项目时被调用,因为一旦粘贴板服务器有数据,它就不再需要您的提供者。每次粘贴数据时都没有通知的机制。一旦粘贴板服务器拥有数据,它就直接满足未来的请求,而不涉及您的应用程序。 –

+0

该方法在您说的时候没有被调用,但当其他进程清除粘贴板执行操作时。另外,假设数据提供者可以提供多种类型,并且在复制后每次粘贴操作时都不必相同,那么您所做的另一个假设也是不正确的。 – Daniel