Je travaille sur une application qui nécessite beaucoup d'entrées utilisateur. Pour cette raison, j'essaie de créer une fonctionnalité qui ne permet pas à l'utilisateur d'afficher plus d'informations pendant au moins 10 secondes. Cela aiderait à réduire les spammeurs/trolls/etc. Essentiellement, ce qui se passe lorsque l'utilisateur veut signaler quelque chose, mon application mesure la distance entre l'utilisateur et l'emplacement de l'autre rapport le plus proche. S'ils sont plus loin que 200 mètres et n'ont pas signalé dans les 10 dernières secondes, ils sont libres de poster. Voici venu le code pour accomplir ceci:NSTimer ne fonctionne pas correctement
if(distance > 200 && canPost){
MainMap.addAnnotation(pointAnnotation)
canPost = false
sendTheData(String(locationManager.location?.coordinate.longitude), latitude: String(locationManager.location?.coordinate.latitude), time: getTime(), userId: "admin")
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(MapViewController.postDelayTimer), userInfo: nil, repeats: false)
myTimer.fire()
}else if(distance < 200 && canPost){
let alertController = UIAlertController(title: "Whoa There!", message: "tOO clOSE!", preferredStyle: .Alert)
let defaultAction = UIKit.UIAlertAction(title: "OK", style: .Default, handler: nil)
alertController.addAction(defaultAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
Et ainsi de suite pour les autres instances différentes. La fonction appelée de la minuterie, postDelayTimer
est la suivante:
func postDelayTimer() {
canPost = true
}
assez simple, mais je manque juste quelque chose ici évidemment. Est-ce que quelqu'un a une idée? Merci a tous! Ce que je m'attendais à ce que l'utilisateur ne puisse pas poster à nouveau après avoir posté immédiatement, mais à la place, ils sont en mesure de poster en continu. C'est comme si le bool canPost
reste toujours vrai.
Quel est le problème? Veuillez expliquer ce que vous attendiez et ce qui s'est réellement passé. (Aussi, pourquoi appelez-vous 'myTimer.fire()' vous-même, au lieu d'attendre que la minuterie se déclenche d'elle-même après 10 secondes?) –
Mise à jour, pas tout à fait sûr de la cause. De plus, je ne veux pas que la minuterie se déclenche 10 secondes APRÈS avoir signalé, je veux seulement qu'elle se déclenche QUAND ils rapportent et soient efficaces pendant les 10 secondes précédentes – Ethan
Vous initialisez le minuteur dans une méthode, essayez et initez le minuteur dans la classe et commencez dans la méthode. – Idan