gpt4 book ai didi

ios - 快速无效计时器不起作用

转载 作者:IT王子 更新时间:2023-10-29 05:16:46 24 4
gpt4 key购买 nike

我已经有几天遇到这个问题了,但我不明白自己做错了什么。

我的应用基本上只是创建一些计时器。我需要阻止它们并创建新的。但目前阻止它们不起作用。

self.timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target:self, selector: "timerDidEnd:", userInfo: "Notification fired", repeats: false)

这是我的计时器

func timerDidEnd(timer:NSTimer){
createUnrepeatedAlarmWithUpdateInterval()
}

因为我的计时器不想停止,所以我目前正在使用不重复的计时器,并在它停止后自己启动它。

func stopAlarm() {

if self.timer != nil {
self.timer!.invalidate()
}
self.timer = nil
self.timer = NSTimer()
}

这就是我停止计时器的方式。

alarmManager.stopAlarm()
alarmManager.createUnrepeatedAlarmWithUpdateInterval()

我在创建新计时器之前调用了 stopAlarm() 函数。

我真的不知道我做错了什么所以我感谢每一个答案:)

class AlarmManager: ViewController{

private var timer : NSTimer?
private var unrepeatedTimer : NSTimer?
private let notificationManager = NotificationManager()
private var current = NSThread()
private let settingsViewController = SettingsViewController()

func createRepeatedAlarmWithUpdateInterval(){

var timeInterval:NSTimeInterval = settingsViewController.getUpdateIntervalSettings()

if timer == nil{
timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
target: self,
selector: "repeatedTimerDidEnd:",
userInfo: "Notification fired",
repeats: true)
}
}
func repeatedTimerDidEnd(repeatedTimer:NSTimer){
ConnectionManager.sharedInstance.loadTrainings(settingsViewController.getServerSettings())
createUnrepeatedAlarm(10)
}

func createUnrepeatedAlarm(timeInterval:Double){

unrepeatedTimer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
target: self,
selector: "unrepeatedTimerDidEnd:",
userInfo: "Notification fired",
repeats: false)
}
func unrepeatedTimerDidEnd(unrepeatedTimer:NSTimer){
notificationManager.createNotification(self, reminderType: NotificationManager.ITEMRATINGREMINDER)
notificationManager.createNotification(self, reminderType: NotificationManager.ITEMREMINDER)
print("UnrepeatedAlarm ended")
}

func stopAlarm(){
print("StopAlarm triggered")
if (timer != nil)
{
print("stoptimer executed")
timer!.invalidate()
timer = nil
}

if (unrepeatedTimer != nil)
{
unrepeatedTimer!.invalidate()
unrepeatedTimer = nil
}
}
}

这就是这个类的全部代码。也许这有帮助 :D

最佳答案

安全启动和停止计时器的常用方法是

var timer : Timer?

func startTimer()
{
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(timerFired), userInfo: nil, repeats: true)
}
}

func stopTimer()
{
timer?.invalidate()
timer = nil
}

startTimer() 仅在计时器为 nil 时启动计时器,而 stopTimer() 仅在计时器不为 nil .

您只需在创建/启动新计时器之前注意停止计时器。

关于ios - 快速无效计时器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34507799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com