1

[注意:标题可能不太准确,我不知道如何表达它] 出于某种原因,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: 方法上。使用所有其他方法,事件侦听器工作正常。

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

4

1 回答 1

2

我有另一种称为 format 的方法:它运行一些 shell 脚本。问题是,当格式化方法运行时,事件监听器停止工作。不会记录对主文件夹的任何更改。

这可能也是为什么-readInBackgroundAndNotify:不起作用的原因。

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

于 2009-08-25T18:08:34.150 回答