Timer()
Bonjour à tous,
Dans ma prochaine application, je souhaite qu'une action soit réalisée toutes les 2 minutes, bien entendu il faut qu'elle continue à être réalisée si l'application est en background, comment faire ?
voici le code pour l'action :
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 120.0, target: self, selector: #selector(ViewController.doAction), userInfo: nil, repeats: true)
Merci de votre aide.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Salut !
Le timer est la bonne solution pour faire répéter une action tous les X temps cependant en background c'est plus compliqué car il faut que ton application active un des modes background mis à disposition (que tu peux retrouver dans les Capabilities du projet). Le problème c'est que ce mode Background ne doit être utilisé que dans les cas définis ici : https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
Et bien sur tu as des limitations.
Tout dépend de ce que doit faire ton application toutes les deux minutes. C'est quel genre de chose ?
C'est uniquement pour récupérer la localisation de l'utilisateur.
Avec les éléments de Magiic, j'ai pu mettre en place la fonctionnalité, cela marche.
j'ai un peu galéré sur le fait que j'avais oublié de mettre ceci :
en plus de paramétrer Background modes à ON dans Capabilities.
Merci à vous.
Bonsoir à tous,
Je reviens sur le sujet, j'ai une classe Timer comme ceci :
et j'appelle les méthodes de la classe cTimer dans des ViewController,
par exemple dans PrincipaleViewController:
le problème est que lorsque j'appelle invalidateTimer() dans une autre ViewController (par exemple ParametreViewController), mon timer en cours ne s'arrête pas.
Comment récupérer le bon timer pour le stopper ?
Merci.
C'est normal que ton timer ne s'arrête pas. Tu crées une nouvelle instance de ta classe dans chaque controller or chaque instance est différente.
Utilise une seule instance et non pas plusieurs. Mais créer plusieurs timer c'est pas forcément une chose que tu souhaites non ?
Donc je souhaite le stopper pour le redémarrer avec le nouvel intervalle.
Comment faire pour déclarer une seule instance de timer et pour que je puisse l'utiliser dans n'importe quel contrôleur ?
Merci
Quand tu quittes un Controller tu invalides ton timer et sur le nouveau tu en crées un autre avec l'intervalle de temps voulu par exemple.