gpt4 book ai didi

Swift MacOX - Popover segue 创建多个 View Controller 实例而不在它们被关闭时销毁它们

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:36 26 4
gpt4 key购买 nike

我正在像这样在 Storyboard 中创建一个弹出式样式的 View Controller

enter image description here

然后我点击按钮, View Controller 显示,当我点击外面的任何地方时, View Controller 被“关闭”。

但是,当我再次单击该按钮时, View Controller 的一个新实例启动,而前一个实例仍在运行。我试过 deinit 但是当 View Controller 被“关闭”时它没有被调用。

我怎样才能在点击外部时销毁 View Controller 实例,或者“显示”已经创建的实例?

我在 View Controller 中的代码:

class FileTransViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
timer = Timer.scheduledTimer(timeInterval: 0.25, target: self, selector: #selector(updateProgress), userInfo: nil, repeats: true)
//print(123)
print("\(self)")
}

deinit {
print("destroyed")
if let timer = timer {
timer.invalidate()
}
}

@objc func updateProgress() {
print("updating progress")
}

}

最佳答案

问题与弹出窗口无关。你正在泄漏,因为你保留了计时器,而计时器保留了你——一个经典的保留循环。

要打破循环,您必须使计时器无效。您不能在 deinit 中执行此操作,因为根据定义,只有在您打破循环之后才能调用它。 NSPopover.willCloseNotification 可能是个好机会。

关于Swift MacOX - Popover segue 创建多个 View Controller 实例而不在它们被关闭时销毁它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497967/

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