我正在研究一个需要大量用户输入的应用程序。正因为如此,我试图建立一个功能,不允许用户发布至少10秒钟的更多信息。这将有助于减少垃圾邮件发送者/巨魔/等。基本上,当用户想要报告某些内容时,我的应用会测量用户与最近的其他报告位置之间的距离。如果他们超过200米并且在过去的10秒内没有报道,那么他们可以自由发布。这里是代码来完成这个:NSTimer不能正确执行
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)
}
等等对于其他不同的实例。从定时器,postDelayTimer
调用的函数是这样的:
func postDelayTimer() {
canPost = true
}
很简单,但我只是缺少在这里很明显的东西。有人有想法吗?谢谢大家!
我希望发生的事情是用户在立即发布后无法再发布,但他们可以连续发布。这就好像bool canPost
一直保持为真。
问题是什么?请解释你预期会发生什么,以及发生了什么。 (另外,为什么你要自己调用'myTimer.fire()',而不是等待定时器在10秒后自行启动?) –
更新了,不太清楚是什么导致了它。另外,我不希望计时器在他们报告之后发射10秒钟,我只希望它在他们报告时触发并在前10秒生效 – Ethan
您在方法中初始化计时器,尝试并初始化类中的计时器并在该方法中启动它。 – Idan