Swift:尝试循环更新NSTextField,但它只会获取最后一个值

Iac*_*ari 2 cocoa for-loop nstextfield swift

我非常简单的程序是遍历数组以导出多个文件。当它处于循环中时,我希望它更新一个文本字段以告诉用户当前正在导出哪个文件。代码如下:

for item in filesArray {
    var fileName = item["fileName"]

    fileNameExportLabel.stringValue = "Exporting \(fileName).ext"
    println("Exporting \(fileName).ext")

    //--code to save the stuff goes here--
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是:println正常工作,为每个文件抛出一条消息,但是被调用的标签fileNameExportLabel仅在导出了最后一个文件时才更新,因此在整个循环中该标签为空白,并且在循环结束时获得了最后一个文件名。

任何的想法?我在这里完全是菜鸟,我想知道NSTextField是否需要更新命令,类似于表视图。

提前致谢!

vac*_*ama 5

您的循环正在主线程上运行。在您的功能完成之前,不会进行UI更新。由于这花费了很长时间,因此您应该在后台线程上执行此操作,然后在主线程上更新文本字段。

尝试这个:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    for item in filesArray {
        var fileName = item["fileName"]

        // Update the text field on the main queue
        dispatch_async(dispatch_get_main_queue()) {
            fileNameExportLabel.stringValue = "Exporting \(fileName).ext"
        }
        println("Exporting \(fileName).ext")

        //--code to save the stuff goes here--
    }
}
Run Code Online (Sandbox Code Playgroud)