2009-08-25 4 views
1

[Hinweis: Der Titel ist möglicherweise nicht ganz korrekt, ich wusste nicht, wie ich ihn anders formulieren sollte] Aus irgendeinem Grund funktionierte NSFileHandles readInBackground nicht, daher griff ich zu SCEvents, einem Cocoa Wrapper rund um die FSEvents API von Mac OS X. Ich habe eine separate Klasse namens "EventListener", die alle SCEvents-Sachen behandelt.SCEvents funktioniert bei einigen Methoden nicht?

Es hat diese Methoden:

- (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); 
} 

(ich direkt auf diese Methoden bekam vom SCEvents Beispiel app, sobald ich das ich es für meine eigenen Zwecke zu ändern planen zu arbeiten)

dann in die applicationDidFinishLaunching Methode meiner Haupt AppDelegate Klasse I dieses:

EventListener *events = [[EventListener alloc] init]; 
[events setupEventlistener]; 

die den Hörer initialisiert. Jetzt, nach dem Zuordnen und dem Aufruf der setupEventListener-Klasse, funktioniert alles einwandfrei. Änderungen innerhalb des Benutzerordners werden in der Debuggerkonsole wie gewünscht protokolliert. Ich habe eine andere Methode namens format: das führt einige Shell-Skripte aus. Wenn die Formatierungsmethode ausgeführt wird, funktioniert der Ereignis-Listener nicht mehr. Änderungen am Home-Ordner werden NICHT protokolliert. Dieses Problem tritt nur bei der Methode format: auf. Bei allen anderen Methoden funktioniert der Event-Listener einwandfrei.

Ich bin mir nicht sicher, was das Problem ist. Danke

Antwort

2

Ich habe eine andere Methode namens format: das läuft einige Shell-Skripte. Wenn die Formatierungsmethode ausgeführt wird, funktioniert der Ereignis-Listener nicht mehr. Änderungen am Home-Ordner werden NICHT protokolliert.

Dies war wahrscheinlich der gleiche Grund, warum -readInBackgroundAndNotify: auch nicht funktioniert.

Insbesondere Benachrichtigungsmechanismen funktionieren normalerweise nicht, wenn Sie die Ereignisschleife (des Threads, auf den die Benachrichtigungen ausgerichtet sind) ausführen lassen. In einigen Fällen gehen Benachrichtigungen verloren, wenn Sie lange genug blockieren.

+0

Gibt es eine Lösung? – indragie

+0

Ja: Kehre zur Laufschleife zurück. –

+0

Sorry..Ich bin mir nicht sicher, was das bedeutet (ich habe erst vor ein paar Monaten Object Oriented Programming, Cocoa und Objective-C gestartet). Ich habe diese Seite gefunden: http://www.cocoadev.com/index.pl?RunLoop Und jetzt verstehe ich, was die Lauf-Schleife ist, aber wie komme ich darauf zurück, nachdem das Shell-Skript gestartet wurde? Danke – indragie

Verwandte Themen