gpt4 book ai didi

Swift OSX - 从另一个类或者线程更新 NSTextView

转载 作者:行者123 更新时间:2023-11-30 11:28:57 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com