[注意:标题可能不准确,我不知道怎么说短语] 出于某种原因,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脚本。问题是,当格式方法运行时,事件侦听器停止工作。不记录对主文件夹的任何更改。只有格式:方法才会出现此问题。使用所有其他方法,事件侦听器工作正常。
我不确定问题是什么。感谢
答案 0 :(得分:2)
我有另一个叫做format的方法:运行一些shell脚本。问题是,当格式方法运行时,事件侦听器停止工作。不记录对主文件夹的任何更改。
这可能与-readInBackgroundAndNotify:
无效的原因相同。
具体来说,通知机制通常不起作用,除非您让(运行通知的线程)的事件循环运行。在某些情况下,如果您阻止的时间足够长,通知将会丢失。