SCEvents在某些方法中不起作用?

时间:2009-08-25 16:26:10

标签: objective-c cocoa fsevents

[注意:标题可能不准确,我不知道怎么说短语] 出于某种原因,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示例应用程序获得这些方法,一旦我开始工作,我打算为了我自己的目的而改变它)

然后在我的主app appate class的applicationDidFinishLaunching方法中我有这个:

EventListener *events = [[EventListener alloc] init];
[events setupEventlistener];

初始化监听器。现在,在分配它并调用setupEventListener类之后,一切正常。主文件夹内的更改将按原样记录到调试器控制台中。我有另一种称为格式的方法:运行一些shell脚本。问题是,当格式方法运行时,事件侦听器停止工作。不记录对主文件夹的任何更改。只有格式:方法才会出现此问题。使用所有其他方法,事件侦听器工作正常。

我不确定问题是什么。感谢

1 个答案:

答案 0 :(得分:2)

我有另一个叫做format的方法:运行一些shell脚本。问题是,当格式方法运行时,事件侦听器停止工作。不记录对主文件夹的任何更改。

这可能与-readInBackgroundAndNotify:无效的原因相同。

具体来说,通知机制通常不起作用,除非您让(运行通知的线程)的事件循环运行。在某些情况下,如果您阻止的时间足够长,通知将会丢失。