Ich benutze das Codebeispiel von David Hamrick um eine Datei mit GCD zu überwachen.
%Vor%Ich möchte verwenden, um eine Änderung eines Plist zu überwachen. Ich bekomme eine Benachrichtigung nach der ersten Änderung, aber nicht für die folgenden Änderungen. Warum?
Sie können die Datei tatsächlich erneut öffnen und eine Quelle erneut registrieren (die vorherige löscht), wenn DISPATCH_VNODE_DELETE empfangen wird. Oder Sie können einen Aufruf verwenden, der nur für diese Art von Szenario entwickelt wurde, nämlich dispatch_io_create_with_path () - das nicht nur nach Pfad sucht, sondern die Datei für Sie öffnet und Sie den Inhalt asynchron lesen lässt.
Da Sie gefragt haben (nicht sicher, nach welcher Technik Sie gefragt haben, aber hier ist die einfachste), ist hier ein eigenständiges Codebeispiel:
%Vor%Nach ein bisschen Recherche Ich habe herausgefunden:
= & gt; Ich erhielt das Flag DISPATCH_VNODE_DELETE
Ich habe ~/Library/Preferences/com.apple.dock.plist
überwacht. Nachdem ich herausgefunden habe, dass die Ausrichtung des Docks geändert wird, lösche ich die ursprüngliche Datei und ersetze sie durch eine neue.
Daher wurde die Überwachung gestoppt.
Derselbe Autor schlägt vor eine Lösung , bei der sich der GCD-Block im Falle des Löschens selbst anmeldet, um die Überwachung fortzusetzen.
Tags und Links objective-c grand-central-dispatch cocoa