You can do this using NSFilePresenter.
The observing class must conform to NSFilePresenter as shown below.
The presentedItemURL would point to the folder you want to observe.
If there is a change in the folder presentedSubitemDidChangeAtURL get called. The code snipped below could give you an idea how it can work.
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
}
}
}
}
}
Best wishes.
presentedSubitemDidAppear(at:)
, in stead ofpresentedSubitemDidChangeAtURL()
, since I'm actually only interested in when items are added to folder. But this method never gets called. Only thedidChange
. Do you know why? – Horticulture