为什么在显示 NSAlert 之后没有任何效果?
Why is it that after showing an NSAlert nothing works?
为什么在显示 NSAlert
之后,在我关闭 NSAlert
之前没有任何效果?
我试图在 NSAlert
显示后打印语句,但 print
不起作用。
下面附上我的代码:
let alert: NSAlert = NSAlert()
alert.messageText = "Hello I am Message text"
alert.informativeText = "i am information"
alert.addButton(withTitle: "OK") // First Button
alert.addButton(withTitle: "Cancel") // 2nd Button
alert.alertStyle = NSAlert.Style.warning
alert.delegate = self
if alert.runModal() == .alertFirstButtonReturn {
print("First Button clicked")
} else {
print("Cancel button clicked")
}
print("after NSAlert >>>>>>> ")
if alert.runModal()
这是在应用程序范围的模态会话中执行的
这里来自文档:
Summary
Runs the alert as an app-modal dialog and returns the constant that
identifies the button clicked. Declaration
open func runModal() -> NSApplication.ModalResponse
My question is why.
注意 runModal
returns 如何将模态的结果作为 NSModalResponse
。 alert.runModal()
行之后的代码必须能够访问它 returns 的值,例如
let result = alert.runModal()
print(result)
如果 runModal
之后的代码是 运行 一旦显示模态 , result
会是什么?用户还没有点击模式上的任何按钮,所以没有人知道!
这就是为什么当 runModal
被调用时,代码执行会在那一行暂停,直到用户选择其中一个选项。 runModal
是 同步的 和 阻塞的 。
将此与 alert.beginSheetModal
进行比较,后者接受 completionHandler
闭包,并且不返回模态响应,而是传递给 completionHandler
。这允许调用后的代码在呈现模态时继续 运行,因为调用后的代码无法访问模态响应。只有 completionHandler
中的代码可以。 beginSheetModal
是 异步的 .
如果您有想要在显示警报时立即打印的内容,请在 runModal
调用之前将其写入,并(可选)将其包装在 DispatchQueue.asyncAfter
/DispatchQueue.async
调用,所以你的 print
是异步的。
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
print("Hello")
}
alert.runModal()
为什么在显示 NSAlert
之后,在我关闭 NSAlert
之前没有任何效果?
我试图在 NSAlert
显示后打印语句,但 print
不起作用。
下面附上我的代码:
let alert: NSAlert = NSAlert()
alert.messageText = "Hello I am Message text"
alert.informativeText = "i am information"
alert.addButton(withTitle: "OK") // First Button
alert.addButton(withTitle: "Cancel") // 2nd Button
alert.alertStyle = NSAlert.Style.warning
alert.delegate = self
if alert.runModal() == .alertFirstButtonReturn {
print("First Button clicked")
} else {
print("Cancel button clicked")
}
print("after NSAlert >>>>>>> ")
if alert.runModal()
这是在应用程序范围的模态会话中执行的
这里来自文档:
Summary
Runs the alert as an app-modal dialog and returns the constant that identifies the button clicked. Declaration
open func runModal() -> NSApplication.ModalResponse
My question is why.
注意 runModal
returns 如何将模态的结果作为 NSModalResponse
。 alert.runModal()
行之后的代码必须能够访问它 returns 的值,例如
let result = alert.runModal()
print(result)
如果 runModal
之后的代码是 运行 一旦显示模态 , result
会是什么?用户还没有点击模式上的任何按钮,所以没有人知道!
这就是为什么当 runModal
被调用时,代码执行会在那一行暂停,直到用户选择其中一个选项。 runModal
是 同步的 和 阻塞的 。
将此与 alert.beginSheetModal
进行比较,后者接受 completionHandler
闭包,并且不返回模态响应,而是传递给 completionHandler
。这允许调用后的代码在呈现模态时继续 运行,因为调用后的代码无法访问模态响应。只有 completionHandler
中的代码可以。 beginSheetModal
是 异步的 .
如果您有想要在显示警报时立即打印的内容,请在 runModal
调用之前将其写入,并(可选)将其包装在 DispatchQueue.asyncAfter
/DispatchQueue.async
调用,所以你的 print
是异步的。
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
print("Hello")
}
alert.runModal()