1

[注: タイトルは正確ではないかもしれません。他の言い方がわかりませんでした] 何らかの理由で NSFileHandle の readInBackground が機能しなかったので、Mac OS X の FSEvents API の Cocoa ラッパーである SCEvents に頼りました。すべての SCEvents を処理する「EventListener」という別のクラスがあります。

次のメソッドがあります。

- (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: メソッドでのみ発生します。他のすべてのメソッドでは、イベント リスナーは正常に機能します。

何が問題なのかわからない。ありがとう

4

1 に答える 1

2

format: と呼ばれる別のメソッドがあり、いくつかのシェル スクリプトを実行します。問題は、フォーマット メソッドが実行されているときに、イベント リスナーが機能しなくなることです。ホーム フォルダへの変更はログに記録されません。

-readInBackgroundAndNotify:これもおそらく、うまくいかなかったのと同じ理由でした。

具体的には、(通知の対象となるスレッドの) イベント ループを実行しない限り、通常、通知メカニズムは機能しません。場合によっては、十分に長くブロックすると、通知が失われます。

于 2009-08-25T18:08:34.150 に答える