【问题标题】:Stop NSTimer and dismiss view controller (swift)停止 NSTimer 并关闭视图控制器(swift)
【发布时间】:2016-09-16 09:43:02
【问题描述】:

我正在使用NSTimer 在我的firebase 数据库中查找更新。我已将代码放入我的viewDidLoad()

NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true)

当用户收到数据库中的文件时,我希望用户转到另一个ViewController。问题是旧的ViewController 正在后台运行,或者更改View Controller 时计时器没有停止。

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)            
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("recievedMission") as! RecievedMissionViewController
self.navigationController!.pushViewController(nextViewController, animated: true)

如何解除旧的View Controller 或如何停止NSTimer programmatically?谢谢!

【问题讨论】:

    标签: ios swift nstimer viewcontroller


    【解决方案1】:

    只需存储您的计时器实例,然后当您移动到另一个控制器时使计时器无效,以便首先声明NSTimer 的一个实例。

    var timer:NSTimer?
    

    现在使用这个对象来存储你的 scheduleTimer 的引用。

    self.timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true)
    

    现在简单地转移到另一个控制器。

    self.timer.invalidate()
    

    【讨论】:

      【解决方案2】:
          var timer:NSTimer?
      
          timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: 
          #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true)
      
          //ToStop Timer
      
          timer.invalidate()
          timer = nil
      

      在实例变量 timer 无效后将其 nil 是一件好事,如果您需要创建另一个具有相同变量的计时器,它可以避免进一步的混乱。

      【讨论】:

        【解决方案3】:

        当 NSTimer 还没有失效时,视图控制器的实例还在内存中,并且还没有在 ARC 中释放。所以当旧的视图控制器消失时,你需要使 NSTimer 失效。

        override func viewWillDisappear(animated: Bool) 
        {
           if self.timer != nil
           {
              self.timer!.invalidate()
              self.timer = nil
           }
        }
        

        【讨论】:

          【解决方案4】:

          //嗨,定时器事件完成后,您需要使该定时器失效,如下所示

          yourTimer.invalidate()
          

          【讨论】:

            【解决方案5】:

            要取消 NSTimer,只需使用:

            timer?.invalidate()
            

            请确保您的函数DriversInterfaceViewController.CheckFormularChild 在 UIThread 中运行(如果此方法触及 UI),否则它会崩溃

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多