为什么我的计时器每秒倒数3?

时间:2015-10-29 12:46:06

标签: arrays swift nsdate

我有一个倒数计时器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的任何想法?

1 个答案:

答案 0 :(得分:-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 中的其他闭包。