【问题标题】:NSTimer stops after a few secondsNSTimer 几秒钟后停止
【发布时间】:2015-08-29 16:53:31
【问题描述】:

我正在制作一个社交媒体应用程序,注册屏幕中的一项功能是它会检查用户名是否被实时使用并打上 X 或检查是否被使用(再次实时)。我使用计时器来完成此操作,但由于某种原因,计时器会在几秒钟后停止。这是怎么回事?有没有更好的方法来做到这一点?

override func viewDidLoad() {
    username.delegate = self
    email.delegate = self
    password.delegate = self
    var timer = NSTimer()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("checkOrX"), userInfo: nil, repeats: true)
}

func checkOrX() {
    var query = PFQuery(className: "_User")
    query.whereKey("username", equalTo: self.username.text)
    query.findObjectsInBackgroundWithBlock { (users, error) -> Void in
        if let users = users {
            self.usernameCheck.image = UIImage(named: "X.png")
        } else {
            self.usernameCheck.image = UIImage(named: "Check.png")
        }
    }
}

【问题讨论】:

  • 哇,我怀疑 parse 会欣赏该请求垃圾邮件。计时器以什么方式“停止”???您是否添加了日志记录语句?
  • 日志语句是什么意思?
  • 记录语句:print("in checkOrX") 在方法中。花一些时间阅读有关调试的信息,您会做很多事情,我们都会这样做。
  • 你不只是认真地问我记录日志的意思 :O :'(((
  • 仅检查文本字段的内容是否更改(为此目的有通知)可能比每秒检查 100 次更有效。

标签: ios xcode swift parse-platform nstimer


【解决方案1】:

与其每秒发送 100 个请求(由于多种原因是不好的),不如每次用户更改实际用户名时最多发送一个请求。

为什么您当前的解决方案不好:

  • 您发送的请求过多 - 句号
  • 您一遍又一遍地发送相同的请求
  • 您可能会因为发送这么多垃圾邮件而被禁止解析
  • 你造成了太多的网络流量,假设有人在移动互联网上填写登录表单 5-10 秒,分心并让应用程序打开 1 分钟左右,我个人不乐意失去一个仅此而已。

你能做什么:

  • 在用户对其用户名进行每次更改后发送请求(使用 this question & answer 并将其与您的 checkOrX 结合使用)
  • 发送新请求后,立即取消之前发送的尚未完成当前请求的请求
  • 等待用户的微小停顿 - 如果他在 0.1 秒内没有输入新字符,然后才查询服务器
  • 仅当用户尝试提交表单时才发送请求
  • 仅当用户关注另一个表单元素时才发送请求

第一个“解决方案”的示例版本可能看起来像

func viewDidLoad() {
    // ...
    self.username.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
}

func textFieldDidChange(textField: UITextField) {
    if textField == self.username {
        checkOrX()
    }
}

【讨论】:

  • 每次更改用户名时如何发送请求?
  • @EthanCotler 我为那个特殊案例添加了更多细节
猜你喜欢
  • 2012-09-15
  • 2014-05-18
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2019-09-13
相关资源
最近更新 更多