明确告诉[重复]的计时器未启动

问题描述 投票:0回答:1

这开始让我发疯,因为这没有道理...我正在使用Swift,无论我做什么,似乎都无法启动此计时器。

我有一个NSObject可以处理我应用程序中所有与时间有关的事情,在该NSObject中,我有一个初始化计时器的函数。看起来像这样:

 class Time: NSObject {

  static let sharedInstance = Time()
  private override init(){}

         var roundTimer = Timer()


         //This is called from my splash screen while the app is loading
     func initializeTimers(){

            //Initialize the round countdown timer

  roundTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(updateRoundTimerCountdown)), userInfo: nil, repeats: true)
    print("The round timer should have started")

            }

    @objc func updateRoundTimerCountdown(){print("Round Timer ran"); Time.roundTimerIsAt -= 1; print("Round Timer: \(Time.roundTimerIsAt)")}

        }

从应用加载所有用户数据的初始屏幕中,我呼叫Time.sharedInstance.initializeTimers()以启动它。我了解到它在调试器上打印了“应该启动循环计时器”(发生在应该启动计时器的行之后),但是选择器根本没有命中。没有将“ Round Timer ran”运行到调试器,也没有启动计时器,所以我在做什么错?

我非常感谢您的帮助,即使答案非常明显,大声笑:P我在此上花费了太多时间!

ios swift timer selector
1个回答
0
投票

我实际上终于让它开始工作!对不起...如果我发布整个启动画面视图控制器和Time NSData,将会有太多的代码,但问题似乎出在其他地方。但是也许其他人可能会遇到这个问题,所以这可能会有所帮助。

[在我的启动屏幕上,我执行了15个“应用程序加载步骤”,其中包括几个从服务器收集信息的步骤,诸如此类...通过使用完成处理程序来确保确实收集了数据,这些步骤将逐步进行。

是在收集了一些数据之后,我将其称为Time.sharedInstance.initializeTimers()函数。我对服务器的调用在与主线程不同的线程上运行,因此很显然,在完成处理程序运行之后,通过调用此函数,它仍在其他线程上,并且这些计时器无法在除主线程之外的任何其他线程上启动! >

所以我要做的就是这个:

DispatchQueue.main.async {Time.sharedInstance.initializeTimers()}

现在可以使用...(facepalm)。对我来说没有多大意义,但是...有效:P


0
投票

我实际上终于让它开始工作!对不起...如果我发布整个启动画面视图控制器和Time NSData,将会有太多的代码,但问题似乎出在其他地方。但是也许其他人可能会遇到这个问题,所以这可能会有所帮助。

[在我的启动屏幕上,我执行了15个“应用程序加载步骤”,其中包括几个从服务器收集信息的步骤,诸如此类...通过使用完成处理程序来确保确实收集了数据,这些步骤将逐步进行。

是在收集了一些数据之后,我将其称为Time.sharedInstance.initializeTimers()函数。我对服务器的调用在与主线程不同的线程上运行,因此很显然,在完成处理程序运行之后,通过调用此函数,它仍在其他线程上,并且这些计时器无法在除主线程之外的任何其他线程上启动! >

所以我要做的就是这个:

DispatchQueue.main.async {Time.sharedInstance.initializeTimers()}

现在可以使用...(facepalm)。对我来说没有多大意义,但是...有效:P

© www.soinside.com 2019 - 2024. All rights reserved.