Obj-C:每次启动应用程序时,FSEvent都会报告相同的事件

时间:2010-06-22 01:16:49

标签: objective-c cocoa fsevents

我设置了一个运行良好的FSEvent,但每次启动应用程序时都会报告相同的事件。

前:

我的FSEvent监控目录是:

Test/

...并且有三个文件:

test1, test2, test3

但是,在我删除了我的FSEvent目录中的test1之后,它一直告诉我每次运行程序时都删除了test1,而不是删除后的一次。

我清理了上下文中的所有托管对象并删除了整个目录,但事件仍在报告中。

我应该怎么做才能在删除后立即告诉我,然后再说不出来?

非常感谢!

1 个答案:

答案 0 :(得分:1)

文件系统事件在启动之间是持久的。它们由文件系统本身跟踪,而不是应用程序。这就是为什么每次发布都会看到事件的原因。

我相信您必须致电FSEventsPurgeEventsForDeviceUpToEventId等来清除事件。

带上一粒盐。我没有摆弄它。

编辑:

来自File System Events Programming Guide

  

要处理持久性事件,请使用   应用程序应定期存储   它处理的最后一个事件ID。然后,   当它需要回去看看什么   文件已经改变,只需要   看看之后发生的事件   上次知道的事件。获取所有活动   自从过去的一个特定事件,   你在之后传递了事件ID   FSEventStreamCreate或的参数   FSEventStreamCreateRelativeToDevice]   [在每台设备的基础上,您也可以   轻松使用时间戳来确定   要包括哪些事件。去做这个,   你必须先打电话   FSEventsGetLastEventIdForDeviceBeforeTime   从以后获取最后一个事件ID   论证   FSEventStreamCreateRelativeToDevice。

我认为要记住的重要一点是文件系统事件实际上并未存储,甚至与正在观察它们的应用程序相关。它们独立于文件系统本身的应用程序而存在。在实践中,可以设置几个不同的应用程序来观察同一事件。