当前位置: 首页 > 面试题库 >

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

竺焕
2023-03-14
问题内容

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

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

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

    //--code to save the stuff goes here--
}

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

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

提前致谢!


问题答案:

您的循环正在主线程上运行。在您的功能完成之前,不会进行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--
    }
}


 类似资料:
  • 我的程序中有一个错误,使我的循环只读取输入字符串的最后一部分。我想让程序计算一个字符串中每个字符的个数。我不想要答案告诉我如何更有效地存储这些值,而不重复所有内容26次。请回答我在这里提出的问题。抱歉,如果这是一个副本!我只是不知道该说明什么,因为没有明显的错误。

  • 问题内容: 我有一个循环,将一个列表的值设置为另一个列表的值,虽然我可以用当前代码实现此目的,但它只是将最后一组值附加到列表中。在我的设置中可能会导致该问题的原因是什么? 这是我的数据格式: 这是我的格式: 这是我的for循环功能: 这是控制台: 它错过了前两个循环的值,但是完美地捕获了数组中的第三个循环。 问题答案: 应该在语句之后循环外,否则您将覆盖每次迭代中添加到列表的值。

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 我似乎无法在我尝试制作的Mac应用程序中更改文本标签。我正在迅速。这是我正在使用的代码: 这些似乎都不起作用,这是我需要完成的唯一问题。PS当我写sumlab.text时,它说NSTextField没有名为text的成员 问题答案: NSTextField与UITextField不同。它没有属性。但是,它确实继承自具有字符串值属性的NSControl。

  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化:

  • 我不明白为什么ArrayList的ArrayList中的“alofCompoundedPrimean”中的每个元素最后都是相同的。因此,尽管ArrayList“TheNewPrimeFactorSal”看起来是正确的,但for循环的每次迭代似乎都将AlofCompoundedPrimean的所有元素更改为最新迭代的元素;也就是说,AlofCompoundedPrimean不是索引唯一的元素,而是将