2015-09-05 1 views
0

В приложении Mac OS X (Cocoa) я копирую элемент в общий картон NSPasteboard.generalPasteboard(). Элемент использует объект, который реализует протокол NSPasteboardItemDataProvider, чтобы предоставить данные, когда пользователь вставляет его с помощью другого приложения.Как узнать, когда другое приложение Cocoa вставляет элемент, который вы помещаете в общий картон

В зависимости от типа, выбранного целевым приложением, может выполняться некоторая временная работа (как запись файла в файл temp).

Есть ли способ обнаружить, когда эта операция выполнена или отменена, поэтому я могу выполнить некоторую очистку после (как удаление ранее созданного файла temp)?

В качестве примера я использую один и тот же поставщик данных для перетаскивания операций копирования/вставки. Приняв протокол NSDraggingSource, я применяю метод - draggingSession:endedAtPoint:operation:, чтобы знать, когда делать очистку.

ответ

0

Протокол NSPasteboardItemDataProvider для этой цели имеет метод -pasteboardFinishedWithDataProvider:. Он призван дать вам возможность очистить.

По какой-то причине этого недостаточно?

+0

Этот метод выполняется, когда картон берется другой операцией копирования/вставки, возможно, когда кто-то вызывает 'cardboard.clearContents()'. Я хотел бы получать уведомления, когда пользователь вставляет элемент вместо этого (это может произойти несколько раз), если это возможно. – Daniel

+0

Для обещанных данных этот метод также будет называться в первый раз, когда что-то приклеивает элемент, потому что, как только у карточного сервера есть данные, он больше не нужен вашему провайдеру. Нет никакого механизма, который следует информировать каждый раз, когда что-то вставляет данные. После того, как на картотечном сервере есть данные, он напрямую удовлетворяет будущим запросам без участия вашего приложения. –

+0

Метод не вызывается в тот момент, когда вы говорите, но когда другой процесс очищает картон, чтобы выполнить операцию. Кроме того, другое допущение, которое вы делаете, также неверно, учитывая, что поставщик данных может предоставлять несколько типов, и он не должен быть одинаковым в каждой операции вставки после того, как вы скопировали его. – Daniel

Смежные вопросы