[注意:标题可能不太准确,我不知道如何表达它] 出于某种原因,NSFileHandle 的 readInBackground 不起作用,所以我求助于 SCEvents,这是一个围绕 Mac OS X 的 FSEvents API 的 Cocoa 包装器。我有一个名为“EventListener”的单独类,它处理所有 SCEvents 的东西。
它有这些方法:
- (void)setupEventlistener
{
SCEvents *events = [SCEvents sharedPathWatcher];
[events setDelegate:self];
NSMutableArray *paths = [NSMutableArray arrayWithObject:NSHomeDirectory()];
NSMutableArray *excludePaths = [NSMutableArray arrayWithObject:[NSHomeDirectory() stringByAppendingString:@"/Downloads"]];
[events setExcludedPaths:excludePaths];
[events startWatchingPaths:paths];
}
- (void)pathWatcher:(SCEvents *)pathWatcher eventOccurred:(SCEvent *)event
{
NSLog(@"%@", event);
}
(我直接从 SCEvents 示例应用程序中获得了这些方法,一旦我得到它的工作,我计划为我自己的目的改变它)
然后在我的主应用程序委托类的 applicationDidFinishLaunching 方法中,我有这个:
EventListener *events = [[EventListener alloc] init];
[events setupEventlistener];
初始化监听器。现在,在分配它并调用 setupEventListener 类之后,一切正常。主文件夹中的更改会按原样记录到调试器控制台中。我有另一种名为 format: 的方法,它运行一些 shell 脚本。问题是,当格式化方法运行时,事件监听器停止工作。不会记录对主文件夹的任何更改。这个问题只发生在 format: 方法上。使用所有其他方法,事件侦听器工作正常。
我不确定问题是什么。谢谢