ios - NSTimer 未正确执行

标签 ios swift timer nstimer

我正在开发一款需要大量用户输入的应用。正因为如此,我正在尝试构建一个不允许用户在至少 10 秒内发布更多信息的功能。这将有助于减少垃圾邮件发送者/巨魔/等。本质上,当用户想要报告某事时,我的应用程序会测量用户与最近的其他报告位置之间的距离。如果他们距离超过 200 米并且在过去 10 秒内没有报告,那么他们可以自由发布。这是完成此操作的代码:

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 始终保持为真。

最佳答案

您的代码是:

    let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(MapViewController.postDelayTimer), userInfo: nil, repeats: false)
    myTimer.fire()

第二行不正确,删除。您不想手动启动计时器。您想等待计时器在 10 秒后自行触发。

关于ios - NSTimer 未正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560638/

相关文章:

ios - iOS通过网络流式传输音频-随机访问6小时的文件

ios - 在 Swift 中的 View Controller 之间传递对象

javascript - 在 JavaScript 中输入计时器

ios - 如何减小 UITableViewCell 中 ContentSize 的宽度

ios - 在 GameViewController 中的 SKScene 后面显示 UIView

iOS:Xib 文件 Interface Builder 中的顶部布局指南在哪里?

c++ - 创建一个计时器以在 X 秒内调用一个函数

C# 在 10 秒后禁用控件的最简单方法是什么?计时器还是秒表?

ios - APNS 通知 TTL

ios - 在 Swift 中使用泛型数组作为参数的函数