为什么我的计时器每秒倒数 3?
Why is my timer counting down by 3 every second?
我有一个倒计时 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
关于是什么让它触发 3 倍有什么想法吗?
愚蠢的我。意识到如果我从 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 中的其他闭包。
我有一个倒计时 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
关于是什么让它触发 3 倍有什么想法吗?
愚蠢的我。意识到如果我从 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 中的其他闭包。