首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NSTimer仅在失效和重新初始化后触发一次

NSTimer仅在失效和重新初始化后触发一次
EN

Stack Overflow用户
提问于 2018-06-27 04:28:30
回答 1查看 30关注 0票数 0

我有以下函数setPath(),每当用户点击按钮时都会调用该函数:

代码语言:javascript
复制
var loadSuccessfulTimer: Timer? = nil
func setPath(index: Int) {

    self.loadSuccessfulTimer?.invalidate()
    self.loadSuccessfulTimer = nil

    print("setting path")

    self.pause(releaseAudioSession: false)

    self.reset(index: index)
    let song = DataManager.getInstance().getQueueSong(index: index)
    superpowered.setPath(song.url, true)


    self.loadSuccessfulTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(checkLoadSucess), userInfo: nil, repeats: true)
    self.loadSuccessfulTimer!.fire()
}

@objc func checkLoadSucess() {
    let status = self.superpowered.getLoadSuccessful()
    print(status)
    if(status != -1) {
        self.loadSuccessfulTimer?.invalidate()
        self.loadSuccessfulTimer = nil

        if(status == 1){
            print("success")
        } else if(status == 2){
            print("failed")
        }
    }
}

因此,每当调用setPath()函数时,我希望计时器每隔0.2秒触发一次,以检查status = self.superpowered.getLoadSuccessful()的值。变量status的值是-1, 1, 2,当它为12时,我想要停止计时器。但是,以下情况正在发生:

在第一次点击时,它按预期工作,并打印以下内容:

代码语言:javascript
复制
setting path
-1
-1
-1
-1
-1
-1
1
success

在第二次点击时,计时器只触发一次(我猜它来自.fire()),并且打印以下内容:

代码语言:javascript
复制
setting path
-1

我试图查找可能出错的地方,但我所能看到的就是这是使用Timer的推荐方式。

更新

第二次从DispatchQueue.global()调用setPath()时,可能与该问题有关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 04:37:14

NSTimer需要运行循环才能正常工作。主队列有一个免费的运行循环,对于其他队列,您需要确保运行循环可用。

确保您阅读了文档:https://developer.apple.com/documentation/foundation/nstimer

另外,记住要使创建(调度)的运行循环(线程)中的NSTimer对象无效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51050929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档