- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Swift 编程的新手,而且我的背景一直是过程语言,因此我逐渐熟悉了该语言和一些面向对象的概念。
我正在构建一个 OSX 应用程序,它有 1 个 GUI 窗口、2 个输入字段和一个按钮 - 单击按钮时,程序从 1 个文本框中输入的文件夹中获取图像文件,并将它们复制到在第二个文本框中输入的文件夹。在此主窗口上,我们使用 NSTextView 作为输出日志,以便用户了解副本的进度。
ViewController.swift
utilities.swift
ImageCopy.swift
这 3 个控件在我的 ViewController 中定义
@IBOutlet var logView: NSTextView!
@IBOutlet weak var sourceFolder: NSTextField!
@IBOutlet weak var targetFolder: NSTextField!
按钮代码是:
@IBAction func ExecuteButtonPressed(_ sender: NSButtonCell){
utilities.writeToLog(lineOfText: "Copy process starting\n")
processImages(inputFolder, outputFolder) // <-- This can take some time
utilities.writeToLog(lineOfText: "Copy process ended\n")
}
在utilities.swift中,writeToLog函数定义为:
class utilities{
static func writeToLog(lineOfText: String){
// Get current viewcontroller where the logview textview is
let vc = (NSApplication.shared.keyWindow?.contentViewController as! ViewController)
let calendar = Calendar.current
let time=calendar.dateComponents([.hour,.minute,.second], from: Date())
let outputLineOfText = "\(time.hour!):\(time.minute!):\(time.second!) - " + lineOfText
vc.logView.textStorage?.append(NSAttributedString(string: outputLineOfText))
vc.logView.scrollToEndOfDocument(self)
}
所有复制功能都在 ImageCopy.swift 文件中,并利用 writeToLog() 函数在进行过程中尝试写入 GUI 控件。
应用程序正在工作,但有一个异常(exception) - 由于 ProcessImages() 函数可能需要很长时间,并且据我所知,它在主线程上运行,它会阻止 GUI 更新,因此一旦 ProcessImages() 函数返回logView NSTextView 一次性全部更新。
我认为我需要在线程上运行 ProcessImages() 函数,但是当我这样做时,它仍然没有更新 logView。
任何帮助将不胜感激。
**************************************** 更新
我认为我现在走在正确的道路上。我正在研究委托(delegate)和通知在后台线程和 UI View 之间进行通信。
最佳答案
**************************************** 更新
我认为我现在走在正确的道路上。我正在研究委托(delegate)和通知在后台线程和 UI View 之间进行通信。
关于Swift OSX - 从另一个类或者线程更新 NSTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458341/
我是一名优秀的程序员,十分优秀!