2017-08-13 19 views
0

Ich entwickle eine einfache App in Swift und ich muss alle 24 Stunden eine Funktionsausführung planen. Ich bin mir bewusst, die Methode:Planen der Ausführung der Funktion in swift

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: { 
    self.functionToCall() 
}) 

, das mein Problem lösen könnte, aber, das ist die richtige Lösung für eine 24-Stunden Verspätung? Danke

+0

In iOS ist dies nur für eine App möglich, die ständig im Vordergrund läuft. Auf MacOS solltest du besser einen Cronjob oder Hintergrunddienst verwenden. Was wollen Sie mit dieser Funktion erreichen? – clemens

+0

Es ist eine Macos-App, die in der Statusleiste ausgeführt wird. Ich möchte, dass die Funktion überprüft, ob einige Brühformeln aktualisiert werden müssen. – Marco

Antwort

0

Theoretisch ist dies möglich. Das Problem ist, dass Ihre App für 24 Stunden im Vordergrund ausgeführt werden muss, was sehr unwahrscheinlich ist. Leider können Sie keine Hintergrundaufgaben einfach so ausführen.

Die Lösung:

einfach es so aussehen, wie die Funktion im Hintergrund ausführen würde. Jedes Mal, wenn die Update-Funktion aufgerufen wird, speichern Sie einfach die Int(Date().timeIntervalSince1970) auf UserDefaults. Dies funktioniert wie ein Zeitstempel und speichert das letzte Mal, als Sie Ihre Update-Funktion aufgerufen haben. Jedes Mal, in der viewDidLoad() - Funktion (nicht sicher, ob es das gleiche auf Mac-Apps genannt, aber man kann sich vorstellen, was ich meine) Aufruf:

If let timestamp = UserDefaults.standard.integer(forKey: "yourTimestampKey") { 

    let currentTimestamp = Date().timeIntervalSince1970 
    if (currentTimestamp - timestamp) > 86400 { // number of seconds in 24 hours 
     // the last time your function was updated was at least 24h ago 

     update() 
    } 

} 

Das ist, wie können Sie es erscheinen wie sie aktualisiert wurde der Hintergrund. Ich benutze dies die ganze Zeit in meinen Apps und es funktioniert perfekt.

EDIT:

Vielleicht, falls die App in der Tat 24-Stunden-Lauf werden in einer Reihe, würde ich die obere Funktion einrichten, die Sie zum ersten Mal auch geschrieben.

+0

Danke für deine Antwort, wahrscheinlich musste ich besser erklären, wie meine App gerade funktioniert: Die Update-Funktion wird jedes Mal aufgerufen, wenn die Anwendung gestartet wird, daher stört es mich nicht, die Funktion genau alle 24 Stunden aufzurufen. Mein Problem ist, vorausgesetzt, dass der Benutzer den Mac nicht innerhalb von 24 Stunden ausschaltet, möchte ich, dass das Update 24 Stunden nach der letzten Überprüfung der App geplant ist. Denken Sie also, dass der Versand nach Ihnen ordnungsgemäß funktioniert? Bearbeiten: Die App bleibt aktiv in der Statusleiste, es ist wie die Dropbox oder Google Drive-Apps. – Marco

+0

Ja, dann wird es definitiv funktionieren. Viel Glück :) @MarcoMaggipinto –

+0

danke! Dir auch viel Glück! – Marco

Verwandte Themen