Obj-C: FSEvent сообщает об одном и том же событии при каждом запуске приложения - PullRequest
1 голос
/ 22 июня 2010

Я настроил FSEvent, который работает хорошо, но он продолжает сообщать об одном и том же событии каждый раз, когда я запускаю приложение.

Пример:

Моя директория монитора FSEvent:

Test/

... и есть три файла:

test1, test2, test3

Однако после того, как я удалил test1 в моем каталоге FSEvent, он постоянно сообщает мне, что test1 удалялся каждый раз, когда я запускаю программу, а не один раз после удаления.

Я очистил все управляемые объекты в моем контексте и удалил весь каталог, но о событии продолжают поступать сообщения.

Что мне делать, чтобы оно сообщало мне только сразу после удаления, а затем никогда?

Большое спасибо!

1 Ответ

1 голос
/ 22 июня 2010

Событие файловой системы является постоянным между запусками. Они отслеживаются самой файловой системой, а не приложением. Вот почему вы продолжаете видеть событие при каждом запуске.

Я полагаю, что вы должны позвонить FSEventsPurgeEventsForDeviceUpToEventId или тому подобное, чтобы очистить события.

Возьми это с крошкой соли. Я не слишком возился с этим.

Edit:

Из Руководство по программированию событий файловой системы :

Для работы с постоянными событиями ваш Приложение должно регулярно хранить последний идентификатор события, которое он обрабатывает. Затем, когда нужно вернуться и посмотреть, что файлы изменились, нужно только посмотрите на события, которые произошли после последнее известное событие Чтобы получить все события поскольку конкретное событие в прошлом, вы передаете идентификатор события в с аргумент для FSEventStreamCreate или FSEventStreamCreateRelativeToDevice.] [Для каждого устройства вы также можете легко использовать временную метку, чтобы определить какие события включить. Сделать это, сначала позвони FSEventsGetLastEventIdForDeviceBeforeTime получить последний идентификатор события с аргумент FSEventStreamCreateRelativeToDevice.

Я думаю, что важно помнить, что события файловой системы на самом деле не сохраняются и даже не связаны с приложением, которое их наблюдает. Они существуют независимо от приложения в самой файловой системе. На практике несколько разных приложений могут быть настроены для наблюдения за одним и тем же событием.

...