2015-09-05 51 views
0

在Mac OS X應用程序(Cocoa)中,我正在將項目複製到常規粘貼板NSPasteboard.generalPasteboard()中。該項目利用實施協議NSPasteboardItemDataProvider的對象在用戶使用其他應用程序粘貼數據時提供數據。如何知道另一個Cocoa應用程序何時粘貼到通用粘貼板中的項目

根據目標應用程序選擇的類型,可以完成一些臨時工作(如將文件寫入臨時文件)。

有沒有辦法來檢測何時該操作完成或取消,所以我可以做一些清理後(作爲刪除以前創建的臨時文件)?

作爲示例,我使用相同的數據提供程序來拖放複製/粘貼操作。採用NSDraggingSource協議,我執行方法 - draggingSession:endedAtPoint:operation:知道何時進行清潔。

回答

0

NSPasteboardItemDataProvider協議爲此具有方法-pasteboardFinishedWithDataProvider:。它被稱爲給你一個清理的機會。

這是不是因爲某種原因不夠?

+0

當粘貼板被另一個複製/粘貼操作佔用時,可能在有人調用'pasteboard.clearContents()'時執行該方法。如果可能,我希望在用戶粘貼該項目時得到通知(這可能會發生多次)。 – Daniel

+0

對於承諾的數據,該方法也會在第一次粘貼項目時被調用,因爲一旦粘貼板服務器有數據,它就不再需要您的提供者。每次粘貼數據時都沒有通知的機制。一旦粘貼板服務器擁有數據,它就直接滿足未來的請求,而不涉及您的應用程序。 –

+0

該方法在您說的時候沒有被調用,但當其他進程清除粘貼板執行操作時。另外,假設數據提供者可以提供多種類型,並且在複製後每次粘貼操作時都不必相同,那麼您所做的另一個假設也是不正確的。 – Daniel