2009-08-25 14 views
1

[注意:タイトルが正確でないかもしれません。フレーズに他の方法がわかりませんでした]NSFileHandleのreadInBackgroundが機能しないため、Mac OS XのFSEvents APIに関するCocoaラッパーのSCEventsを使用しました。私はすべてのSCEventsのものを扱う "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メソッドが実行されているときにイベントリスナーが動作しなくなることです。ホームフォルダへの変更は記録されません。この問題はformat:メソッドでのみ発生します。他のすべてのメソッドでは、イベントリスナーは正常に動作します。

問題の内容がわかりません。ありがとう

答えて

2

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

おそらく-readInBackgroundAndNotify:が機能しなかったのと同じ理由が考えられます。

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

+0

解決策はありますか? – indragie

+0

はい:実行ループに戻ります。 –

+0

申し訳ありませんが、私はそれが何を意味するのかよくわかりません(私は数ヶ月前にObject Oriented Programming、Cocoa、Objective-Cを始めました)。私はこのページを見つけました:http://www.cocoadev.com/index.pl?RunLoopそして今、私は実行ループが何であるか理解していますが、シェルスクリプトの起動後にどのように戻ってきますか?ありがとう – indragie

関連する問題