草庐IT

swift/ cocoa : How to watch folder for changes?

coder 2023-09-05 原文

我正在编写一个小型 macOS 应用程序,我希望能够在其中查看文件夹的更改。它不需要监视子文件夹,我只想在文件添加到文件夹或删除时收到通知。

看起来 NSFileCoordinator 和/或 NSFilePresenter 可以用来实现这一点,但我无法理解如何使用它们来实现这一点。

理想情况下,无需包含第三方框架即可解决此问题。

最佳答案

您可以使用 NSFilePresenter 执行此操作。 观察类必须符合 NSFilePresenter,如下所示。

presentedItemURL 将指向您要观察的文件夹。 如果文件夹 presentedSubitemDidChangeAtURL 发生变化,则调用。下面的代码片段可以让您了解它是如何工作的。

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 
                }
            }
        }
    }
}

最良好的祝愿。

关于 swift/ cocoa : How to watch folder for changes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439658/

有关swift/ cocoa : How to watch folder for changes?的更多相关文章

  1. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  2. objective-c - 将 Cocoa header 链接到 ruby​​ C 扩展 - 2

    我正在为ruby​​开发一个C扩展,但我需要包含来自IOBluetooth框架的header,特别是:#import#import一切都编译正常,但在运行时,扩展错误:path/to/file.rb:1:in`require_relative':dlopen(/path/to/extension.bundle,9):Symbolnotfound:_OBJC_CLASS_$_IOBluetoothDeviceInquiry(LoadError)我相当确定这与未包含在链接过程中的框架有关,但我不确定原因。任何帮助将不胜感激extconf.rb:#Loadsmkmfwhichisusedto

  3. objective-c - 如何将 ruby​​ 包捆绑到 [Objective-C] cocoa 应用程序中? - 2

    我想弄清楚如何将用Ruby(Sass)编写的包捆绑到Cocoa应用程序(Objective-C,而不是RubyCocoa)中供我执行(通过NSTask很好,除非有是桥接ObjCCocoa的简单方法,我不知道)。Sass包是您必须安装的东西,使用“geminstall”或“rakeinstall”——这样做会在我的~/.gem目录中放置吨文件。因为我希望任何安装了我的基于Cocoa的应用程序的人都能够从我的应用程序中执行这个工具,我不想让用户经历安装任何额外的过程,所以我希望能够将我需要的所有内容嵌入到我的应用程序包的Resources目录中。但是,我对Ruby的内部结构和结构不是那么熟

  4. ruby - 创建 repo 时无法加载 gem cocoa pod - 2

    rubygems/dependency.rb:296:in`to_specs':在总共35个gem中找不到'cocoapods'(>=0)(Gem::LoadError)来自/Users/divyam.shukla/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems/dependency.rb:307:in`to_spec'from/Users/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in`gem'from/U

  5. ruby-on-rails - SHA1 哈希值在我的 Rails 和 Cocoa 应用程序之间不匹配 - 2

    我有一个Cocoa应用程序将一些数据连同该数据的SHA1哈希值一起发送到Rails应用程序,该应用程序验证数据和哈希值是否匹配,但它们不匹配。为了确保我已经记录了在Rails和Cocoa端散列到控制台的数据的十六进制版本,并且它们完全匹配。这是Cocoa部分:#import//...-(NSData*)dataOfSHA1Hash{unsignedcharhashBytes[CC_SHA1_DIGEST_LENGTH];CC_SHA1([selfbytes],CC_SHA1_DIGEST_LENGTH,hashBytes);return[NSDatadataWithBytes:hash

  6. javascript - 在cocoa webview中调用网页的Javascript函数 - 2

    首先,我是objective-c和cocoa的新手。我找到了与此相关的资源,但没有一个显示我想要的,而且我似乎无法让其他人为我工作。我需要的是一个非常简单的示例,其中包含一个包含按钮的窗口和一个webview,该webview具有一个带有javascript函数的HTML页面,该函数采用一个参数(字符串或其他东西),并通过document.write将其吐出。(我知道javascript)。然后当你在webview外面点击按钮时,它会调用javascript函数,webview会说一些东西,从document.write调用。如果有人可以将这样一个简单的示例放在一起,我将不胜感激!谢谢

  7. swift - 将 json 编码时间转换为 nsdate - 2

    当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的

  8. objective-c - 为什么 Swift 函数定义语法是多余的? - 2

    在C/C++/Java/Go中,我们使用,来分隔参数:(aint,bint)在ObjectiveC中,我们使用:来表示参数::(int)a:(int)b在Swift中,我们必须同时使用:和,:(a:int,b:int)是否需要冗余? 最佳答案 Swift可能有外部和内部参数名称:(externalinternal:Int)如果没有独特的分隔符,会产生很多歧义。 关于objective-c-为什么Swift函数定义语法是多余的?,我们在StackOverflow上找到一个类似的问题:

  9. swift - Swift 和 Go 之间的 Zlib 压缩 - 2

    我的Swift应用程序与用Go编写的服务器通信。我希望使用Zlib压缩传输的数据,但压缩结果似乎与Swift和Go不同。这是Go版本:sourceString:="A-t-ellebesoind'autrespreuves?Acceptez-lapourleplaisir.J'aitantfaitquedelacueillir,Etc'estpresqueunefleur-des-veuves."//Compressionvarbbytes.Bufferwriter:=zlib.NewWriter(&b)writer.Write([]byte(sourceString))writer.

  10. ios - swift api SecKeyCreateEncryptedData 使用的额外认证数据是什么? - 2

    我正在使用rsaEncryptionOAEPSHA256AESGCM在iOS上使用SecKeyCreateEncryptedData加密一些数据,然后在golang后端解密相同的数据。我正在使用3072位rsa公钥来加密对称key。当我从iOS获取数据到后端时,我能够成功解密对称key,但gcm标签验证失败。我使用的是与iOS相同的16字节IV,但不知道iOS在加密时是否使用任何aad(附加身份验证数据)。有谁知道rsaEncryptionOAEPSHA256AESGCMforiOS是否使用了一些aad?这适用于iOS10+。我已经尝试过使用nil、空的16字节数组、aeskey本身、

随机推荐