ios - 如何保留 Timer 实例
问题描述
我有一个视图控制器(TimerVC),我在其中运行一个计时器,并在标签中显示计时器的当前状态。
我的定时器功能:
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(updateTimer)), userInfo: nil, repeats: true)
}
当 TimerVC 打开时(步骤 1),用户点击导航栏上的“返回”按钮后,当用户点击按钮再次显示 TimerVC(步骤 2)时,我可以在控制台中看到计时器仍在后台运行,但是它的状态没有在标签中更新。
我猜这是因为当用户按下“返回”按钮时,TimerVC 的当前实例被破坏,当用户再次打开 TimerVC 时,它会创建一个新的 TimerVC 实例,因此标签无法更新。
我不知道如何在用户点击导航栏中的后退按钮时保留我的 TimerVC 实例,并在用户触发对 TimerVC 的 segue 时恢复旧的 TimerVC 实例。
为了在第 2 步解决这个问题,我尝试返回导航堆栈而不是创建新的推送 segue 到 TimerVC,但它不起作用,可能是因为在堆栈中找不到旧的 TimerVC 视图控制器,所以它无法恢复。这并不奇怪,它应该在点击返回按钮时被破坏。
我应该怎么做才能解决这个问题?
解决方案
在 TimerVC 之前的视图控制器中有一个属性
var timerVC = TimerVC()
当你需要展示它时,只需推动它
self.navigationController.pushViewController(self.timerVC, animated:true)
这样,您将始终处理相同的实例TimerVC
推荐阅读
- c++ - 我正在尝试计算文本文件 C++ 中有多少销售人员
- intel - 如何解决 dyld:MacOS 上未加载库?
- java - 我的第一个使用 VS Code 的“HelloWorld”Java 程序中的 LinkageError
- python - matplotlib 和 geopandas 无法绘制以中国为中心的世界地图
- xml - 在 xsl:for-each 中从 xsl:variable 中查找节点
- javascript - div从右滑到全宽
- php - 如何用html代码嵌套现有的if else?
- css - 如何进行模糊渐变交互
- r - 纠正 sf 大圆 ggplots
- r - 使用 IF 语句创建序数变量