Swift 视图/窗口赢得';在@iAction完成之前,请不要更新

Swift 视图/窗口赢得';在@iAction完成之前,请不要更新,swift,macos,ibaction,Swift,Macos,Ibaction,我有一个链接到IBAction的按钮,大约需要5-10秒才能完成。 当iAction函数运行时,我想在视图/窗口中打印进度消息。 打印的唯一消息是最后一条消息,它在iAction完成后打印(即按钮不是蓝色)。 当我在调试器中单步执行该函数时,在我退出该函数之前,不会看到任何消息(即按钮不是蓝色的) 您知道如何在执行回调时更新窗口吗?将iAction逻辑嵌入后台队列中: DispatchQueue.global(qos: .background).async { // background

我有一个链接到IBAction的按钮,大约需要5-10秒才能完成。 当iAction函数运行时,我想在视图/窗口中打印进度消息。 打印的唯一消息是最后一条消息,它在iAction完成后打印(即按钮不是蓝色)。 当我在调试器中单步执行该函数时,在我退出该函数之前,不会看到任何消息(即按钮不是蓝色的)


您知道如何在执行回调时更新窗口吗?

将iAction逻辑嵌入后台队列中:

DispatchQueue.global(qos: .background).async {
   // background code
}
任何时候需要在视图/窗口中打印进度时,请将该部分嵌入其中:

DispatchQueue.main.async {
   // user interface code
}    
通常,您可能希望尝试以下方法:

DispatchQueue.global(qos: .background).async {
   //background code

   DispatchQueue.main.async {
     //your main thread
   }    
}

请在iAction中共享代码。否则,我们帮不了你。但是根据描述,您正在用繁重的任务阻塞主线程。你应该在后台做,谢谢你。无法使代码正确格式化(我不常在这里发布)。我会试试你和安德里亚的建议。