2016-12-07 5 views
0

In meiner Anwendung habe ich eine Reihe von Aufgaben zu tun. Und jeden Tag zu einer bestimmten Zeit, sagen wir 13 Uhr, muss das Array von Aufgabenobjekten modifiziert werden. Welche Funktionen kann ich verwenden, um dieses Ereignis jeden Tag auszulösen?Bestimmte Werte zu bestimmten Zeiten jeden Tag zurücksetzen

+0

Sie können den Cron-Job auf dem Server einstellen, während Sie die Webservices auf –

+0

verwenden Ich benutze bisher keine Webservices. Ich möchte, dass die Werte auch ohne Internetverbindung zurückgesetzt werden. – Misha

+0

ok !! Ich bin kein IOS-Entwickler, sondern habe an den Webservices gearbeitet, die für den IOS verwendet werden, und der Cron-Job wird auf dem Server gesetzt, wo wir jedes Event mit Datum starten können. –

Antwort

2

Wenn sich die App im Vordergrund befindet, können Sie einen Timer festlegen, der ausgelöst wird, wenn ein bestimmter Zeitgrenzwert überschritten wird. Wenn sich die App im Laufe der Zeit im Hintergrund befindet, können Sie beim nächsten Start der App überprüfen, ob der Schwellenwert überschritten wurde, und dann Ihre Änderungen zu diesem Zeitpunkt vornehmen.

Zum Beispiel kann der Timer fügen Sie diese in Ihrem AppDelegate hinzuzufügen:

private var myTimer: Timer? 

func applicationWillResignActive(_ application: UIApplication) { 
    myTimer?.invalidate() 
} 

func applicationDidBecomeActive(_ application: UIApplication) { 
    //Scheduling for 1 PM (13:00) 
    var dateComponents = Calendar.current.dateComponents([.minute, .hour, .month, .day, .year], from: Date()) 
    dateComponents.hour = 13 
    dateComponents.minute = 00 
    dateComponents.timeZone = TimeZone.current 

    if let timerDate = Calendar.current.date(from: dateComponents) { 
     myTimer = Timer(fireAt: timerDate, interval: 0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: false) 
    } 

    if let myTimer = myTimer { 
     RunLoop.current.add(myTimer, forMode: RunLoopMode.commonModes) 
    } 
} 

func timerFired() { 
    //Do you update here 
} 

Sie könnten eine zusätzliche Prüfung in der applicationDidBecomeActive Methode hinzufügen zu überprüfen, ob Ihre Änderung wurde bereits für den Tag geschehen, falls der Der Schwellenwert wird überschritten, während die App im Hintergrund oder inaktiv ist.

+0

Eigentlich habe ich beschlossen, es einfach so zu machen, wie du gesagt hast. Ich setze jedes Mal ein Date-Objekt, wenn auf die App in meinen UserDefaults zugegriffen wird. Dann überprüfe ich jedes Mal, wenn ich die App erneut öffne, wenn das neue Zugriffsdatum am selben Tag ist wie das lastDate in meinen userDefaults, und ändere meine Objekte, wenn sie nicht am selben Tag sind. Funktioniert jetzt gut !! – Misha

Verwandte Themen