2016-10-05 7 views
0

Ich muss einen Timer ausführen, wenn der Benutzer in App ist und auch wenn die App im Hintergrund ist.Laufzeit-Timer in App und wenn App im Hintergrund ist

Der Kontext ist: wenn er auf einem bestimmten View-Controller ist, wird nach 5 Minuten zum Main View-Controller umgeleitet. Der Timer sollte ihn umleiten, wenn die App im Hintergrund bleibt und die App aufruft. Irgendeine Idee, wie kann ich das erreichen?

Antwort

0

Sie können dies nicht mit einem normalen NSTimer tun, da es keine Hintergrundunterstützung gibt. Es ist jedoch sehr leicht erreichbar mit einer anderen Methode.

In Ihrem AppDelegate haben Sie zwei Methoden. applicationWillResignActive und applicationDidBecomeActive. Bei der resign-Methode müssen Sie einfach die aktuelle NSDate in der NSUserDefaults beibehalten und in der aktiven Methode abrufen und mit der aktuellen NSDate vergleichen, um die Zeit zu ermitteln, für die die App inaktiv war.

Code-Beispiele:

func applicationWillResignActive(application: UIApplication) { 
    let date = NSDate() 
    NSUserDefaults.standardUserDefaults().setObject(date, forKey: "DateTimer") 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    if let persistedDate = NSUserDefaults.standardUserDefaults().objectForKey("DateTimer") as? NSDate { 
     let difference = NSCalendar.currentCalendar().components([.Second], fromDate: persistedDate, toDate: NSDate(), options: []) 
     let differenceSeconds = difference.second 
    } 
} 
0

Eine weitere Möglichkeit für diese in Swift tun 3:

  1. Erste aktuelle Zeit in Sekunden in Anspruch nehmen und es Benutzereinstellungen

    func applicationWillResignActive(_ application: UIApplication) { 
        let date = NSDate() 
        let resignTime = Int64(date.timeIntervalSince1970) 
        UserDefaults.standard.set(resignTime, forKey: "logOutTime") 
    } 
    
  2. Wenn sparen Wenn eine App aktiv wird, können Sie die letzte aktive Zeit, die mit den Benutzervorgaben gespeichert wurde, mit der cu vergleichen Ruhezeit. (Anmerkung: beide Elemente in einem Format sein müssen)

    func applicationDidBecomeActive(_ application: UIApplication) { 
        if let resignTime = UserDefaults.standard.object(forKey: "logOutTime") as? Int64 { 
         let date = NSDate() 
         let currentTime = Int64(date.timeIntervalSince1970) 
         debugPrint("diff: ", currentTime-resignTime) 
         let diff = currentTime-resignTime 
         if diff >= 300{ //checking difference of time which you expect 
         } 
        } 
    } 
    

Und das ist alles. Sie können tun, was Sie wollen, wenn die Bedingung wahr ist.

Verwandte Themen