SCEvents не работает в некоторых методах? - PullRequest
1 голос
/ 25 августа 2009

[Примечание: название может быть менее точным, я не знал, как еще его сформулировать] По какой-то причине readFBackground NSFileHandle не работало, поэтому я прибегнул к SCEvents, оболочке Какао вокруг FSEvents API в Mac OS X. У меня есть отдельный класс с именем "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: он запускает некоторые сценарии оболочки. Проблема заключается в том, что при запуске метода format прослушиватель событий перестает работать. Любые изменения в домашней папке НЕ регистрируются. Эта проблема возникает только с форматом: метод. Со всеми другими методами прослушиватель событий работает нормально.

Я не уверен, в чем проблема. Спасибо

1 Ответ

2 голосов
/ 25 августа 2009

У меня есть другой метод, называемый format: он запускает некоторые сценарии оболочки. Проблема заключается в том, что при запуске метода format прослушиватель событий перестает работать. Любые изменения в домашней папке НЕ регистрируются.

Вероятно, это была та же причина, по которой -readInBackgroundAndNotify: тоже не работал.

В частности, механизмы уведомлений обычно не работают, если вы не позволите циклу событий (потока, на который нацелены уведомления) работать. В некоторых случаях, если вы заблокируете достаточно долго, уведомления будут потеряны.

...