Pausing timer when app is in background state Swift

后端 未结 5 878
攒了一身酷
攒了一身酷 2021-01-02 05:57

My ViewController.swift

func startTimer() {
    timer = NSTimer().scheduleTimerWithTimerInvterval(1.0,target: self,selctor: Selector(\"couting\"),userinfo: n         


        
相关标签:
5条回答
  • 2021-01-02 06:15

    Updated Answer for Swift 5:

    NotificationCenter.default.addObserver
                  (self,
                   selector: #selector(myObserverMethod),
                   name:UIApplication.didEnterBackgroundNotification, object: nil)
    
    @objc func myObserverMethod(){
        print("Write Your Code Here")
    }
    
    0 讨论(0)
  • 2021-01-02 06:27

    Accepted answer by @Suresh in Swift 3

    Set an observer listening to when the application did enter background in your ViewController's viewDidLoad() method.

     NotificationCenter.default.addObserver(self, selector: #selector(myObserverMethod), name:NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
    

    Add the below function to receive the notification.

     func myObserverMethod(notification : NSNotification) {
    
       print("Observer method called")
    
      //You may call your action method here, when the application did enter background.
      //ie., self.pauseTimer() in your case.
    
    }
    
    0 讨论(0)
  • 2021-01-02 06:33

    You have to set an observer listening to when the application did enter background. Add the below line in your ViewController's viewDidLoad() method.

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("myObserverMethod:"), name:UIApplicationDidEnterBackgroundNotification, object: nil)
    

    Add the below function to receive the notification.

    func myObserverMethod(notification : NSNotification) {
        println("Observer method called")
    
        //You may call your action method here, when the application did enter background.
        //ie., self.pauseTimer() in your case.
    }
    

    Happy Coding !!!

    0 讨论(0)
  • 2021-01-02 06:33

    You are creating a new object and calling pauseTimer() on it:

    viewController().pauseTimer()   // This line causes issue viewController(), creates a new instance
    

    Instead of creating new object, either you should pass that instance to AppDelegate and call pauseTimer() on existing object or Listen for UIApplicationDidEnterBackgroundNotification notification in your view controller class and pause timer from there.

    0 讨论(0)
  • 2021-01-02 06:36

    Updated Answer for Swift 4:

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(myObserverMethod), name:NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
    }
    
    @objc func myObserverMethod() {
        // Call your action method here, when the application did enter background.
    }
    
    0 讨论(0)
提交回复
热议问题