【发布时间】:2017-01-09 09:58:20
【问题描述】:
我正在像这样创建计时器和循环。
private var iteration:Int = 0
private var syncTimer:Timer? = Timer()
//MARK: - Singleton
static let synchronizationInstance:DeviceSynchronization = DeviceSynchronization()
private init(){
}
public func synchronizeAllDevices(){
let when = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: when) {
self.syncTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(DeviceSynchronization.synchronizeDevices), userInfo: nil, repeats: true)
self.syncTimer?.fire()
}
}
}
@objc private func synchronizeDevices(){
if iteration >= 7 {
syncTimer?.invalidate()
syncTimer = nil
iteration = 0
} else {
devicesList![iteration].synchroniseState()
iteration += 1
}
}
当它达到七次代表时,syncTimer?.invalidate() 和 syncTimer = nil 应该停止 syncTimer 但没有任何反应。计时器仍然有效。不知道是不是bug。
【问题讨论】:
-
您可能在代码中的某处再次被称为
synchronizeAllDevices,.invalidate()应该可以正常工作 -
就我上面显示的代码测试(我需要移动一个不平衡的右括号)而言,您的代码按预期工作。正如 Tj3n 建议的那样,您在隐藏的某个地方有一些故障。
-
我不确定类 DeviceSynchronization 的实现在哪里,但乍一看似乎
#selector(DeviceSynchronization.synchronizeDevices)应该是这样的:@987654328 @ 反而;但不清楚这个 sn-p 是否来自实际的 DeviceSynchronization 类。 -
我将 #selector(DeviceSynchronization.synchronizationInstance.synchronizeDevices) 更改为 #selector(DeviceSynchronization.synchronizationInstance.synchronizeDevices) 但它仍然不起作用。
-
@WujoFefer,您可能需要发布完成的实现才能看到全貌,因为在我的测试类中,您的代码完美无缺,并且计时器在第 7 次迭代后停止;但是在我的测试类中,您的所有代码(原样)都在
DeviceSynchronization类的实现中;但根本不清楚该类在您的屏幕上的外观。
标签: ios iphone swift swift3 ios10