Théoriquement, c'est possible. Le problème est que votre application devrait fonctionner au premier plan pendant 24 heures, ce qui est très improbable. Malheureusement, vous ne pouvez pas exécuter les tâches d'arrière-plan comme ça.
La solution:
juste faire ressembler à la fonction exécuterait en arrière-plan. Chaque fois que la fonction de mise à jour est appelée, enregistrez simplement Int(Date().timeIntervalSince1970)
dans UserDefaults. Cela fonctionne comme un horodatage et enregistre la dernière fois que vous avez appelé votre fonction de mise à jour. Chaque fois que dans le viewDidLoad() - fonction (pas sûr si elle est appelée même sur les applications Mac, mais vous pouvez imaginer ce que je veux dire) appel:
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()
}
}
Voilà comment vous pouvez le faire apparaître comme il a été mis à jour l'arrière-plan. Je l'utilise tout le temps dans mes applications et cela fonctionne parfaitement.
EDIT:
Peut-être, juste au cas où l'application ne fait fonctionner 24 heures d'affilée, j'établiraient la fonction supérieure que vous avez publié d'abord ainsi.
Dans iOS, ceci n'est possible que pour une application qui fonctionne constamment au premier plan. Sur macOS, vous devriez utiliser un cronjob ou un service d'arrière-plan. Que voulez-vous réaliser avec cette fonction? – clemens
Il s'agit d'une application macos qui s'exécute dans la barre d'état. Je veux que la fonction vérifie si certaines formules d'infusion doivent être mises à jour. – Marco