我正在研究一個需要大量用戶輸入的應用程序。正因爲如此,我試圖建立一個功能,不允許用戶發佈至少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