【问题标题】:Why is my timer counting down by 3 every second?为什么我的计时器每秒倒计时 3 次?
【发布时间】:2016-01-29 14:52:59
【问题描述】:

我有一个倒计时 3 的计时器。我在 viewDidLoad 方法中触发计时器,我还从 Parse 查询时间变量。

这是我的计时器功能所在的代码:

    var createdAt = object.createdAt
            if createdAt != nil {

                let calendar = NSCalendar.currentCalendar()
                let comps = calendar.components([.Hour, .Minute, .Second], fromDate: createdAt as NSDate!)
                let hour = comps.hour  * 3600
                let minute = comps.minute * 60
                let seconds = comps.second


                self.timerInt.append(hour + minute + seconds)

                var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("countDown"), userInfo: nil, repeats: true)


            } 

            }

        }


    })
    self.tableView.reloadData()

}

我尝试更改 self.tableView.reloadData(),因为我假设这是一个 reloadData 问题。

这是我的倒计时功能:

       func countDown() {
        //timerInt is an array where I'm storing the Int values.
        for i in 0 ..< timerInt.count {

            let hours = timerInt[i] / 3600
            let minsec = timerInt[i] % 3600
            let minutes = minsec / 60
            let seconds = minsec % 60
       print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
          timerInt[i]--

        }
            self.tableView.reloadData()
}

我希望这一切都发生在 cellForRowAtIndexPath 方法中..

这里是 cellForRowAtIndexPath 方法:

  let hours = timerInt[indexPath.row] / 3600
    let minsec = timerInt[indexPath.row] % 3600
    let minutes = minsec / 60
    let seconds = minsec % 60

  //defining the time 

    myCell.secondLabel.text = String(format: "%02d:%02d:%02d", hours, minutes, seconds)

             //formatting the time


    return myCell

关于是什么使它触发 3x 的任何想法?

【问题讨论】:

    标签: arrays swift nsdate


    【解决方案1】:

    我太傻了。意识到如果我从 Parse 中查询 3 个对象,则秒数会倒数 3。如果我查询 4,那么秒数会倒数 4。

    问题是我在哪里触发了计时器方法:

    var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("countDown"), userInfo: nil, repeats: true)

    我需要在我查询的地方之外触发它。因为如果它在那里触发,那么它是由我正在查询的对象数量触发的。

    现在我像这样放置timer 变量,它可以工作了:):

          var createdAt = object.createdAt
                if createdAt != nil {
    
                    let calendar = NSCalendar.currentCalendar()
                    let comps = calendar.components([.Hour, .Minute, .Second], fromDate: createdAt as NSDate!)
                    let hour = comps.hour  * 3600
                    let minute = comps.minute * 60
                    let seconds = comps.second
    
    
                    self.timerInt.append(hour + minute + seconds)
    
    
                }
    
    
                }
    
            }
    
             var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("countDown"), userInfo: nil, repeats: true)
    
        })
        self.tableView.reloadData()
    
    }
    

    注意,} 来自我的 viewDidLoad 中的其他闭包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多