gpt4 book ai didi

ios - NSTimer scheduledTimerWithTimeInterval - 不调用函数

转载 作者:行者123 更新时间:2023-11-28 09:55:19 29 4
gpt4 key购买 nike

我想在后台运行一个计时器。所以我创建了一个单例。

问题是在设置的 5.0 秒后,它没有调用函数 timeEnded()。 Xcode建议在函数前面添加@Objc(像这样:@Objc func timeEnded() {...)来解决一些问题(我不明白什么,虽然)。但它仍然没有调用该函数。有什么想法吗?

class TimerService {
static let instance = TimerService()
var internalTimer: NSTimer?

func startTimer() {
guard internalTimer != nil else {
return print("timer already started")
}
internalTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(TimerService.timeEnded), userInfo: nil, repeats: false)
}

func timeEnded() {
//NSNotificationCenter.defaultCenter().postNotificationName("timerEnded", object: nil)
print("timer Ended")
}
}

最佳答案

您永远不会真正启动计时器,因为您的 startTimer() 函数将始终在到达您创建计时器的代码行之前返回。

在您的 guard 语句中,您仅在 internalTimer != nil 时才继续执行该函数,但您设置计时器的唯一位置是之后 那句话。因此,永远不会创建您的计时器,internalTimer 将始终为 nil

这应该可以解决您的问题:

func startTimer() {
guard internalTimer == nil else {
return print("timer already started")
}
internalTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(TimerService.timeEnded), userInfo: nil, repeats: false)
}

关于ios - NSTimer scheduledTimerWithTimeInterval - 不调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38411958/

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