Swift / Cocoa: как посмотреть папку на предмет изменений? - PullRequest
0 голосов
/ 21 мая 2018

Я пишу небольшое приложение для MacOS, в котором я хочу, чтобы можно было просматривать папку на предмет изменений.Не нужно смотреть подпапку, я хочу получать уведомление, только если файл добавлен в папку или удален.

Похоже, NSFileCoordinator и / или NSFilePresenter можно использовать для достиженияэто, но я не смог понять, как использовать их для достижения этой цели.

В идеале это можно решить без использования сторонних фреймворков.

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете сделать это с помощью NSFilePresenter.Класс наблюдения должен соответствовать NSFilePresenter, как показано ниже.

ПредставленныйItemURL будет указывать на папку, которую вы хотите наблюдать.Если есть изменения в представленной папке, вызывается SubitemDidChangeAtURL.Приведенный ниже код может дать вам представление о том, как он может работать.

class ObservingClass: NSObject, NSFilePresenter {

    lazy var presentedItemOperationQueue = NSOperationQueue.mainQueue()
    var presentedItemURL:NSURL?


    func presentedSubitemDidChangeAtURL(url: NSURL) {

        let pathExtension = url.pathExtension

        if pathExtension == "png"{
            refreshImages()
        }
    }

   func refreshImages(){


        let path = snapshotPath
        var isDirectory: ObjCBool = ObjCBool(false)

        if NSFileManager.defaultManager().fileExistsAtPath(path!, isDirectory: &isDirectory){

            if isDirectory{

                do {
                    let list = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(path!) as Array<String>

                    for filePath in list{

                        if filePath.hasSuffix(".png"){

                            if let snapshot = snapshotAtPath(path! + "/" + filePath){

                                newSnapshotArray += [snapshot]

                            }

                        }
                    }

                } catch {
                    // error handling 
                }

            }
        }

    }

}

С наилучшими пожеланиями.

...