【发布时间】:2018-01-28 11:46:36
【问题描述】:
这里在myAPICall() 方法中调用另一个方法,即COStatusAPI(),每 5 秒最多 90 秒。
这里的COStatusAPI() 是一个API 调用。即,我每 5 秒访问一次服务器。作为回应,我会得到 COStatus 为 1 或 0。
如果我得到 COStatus 为 1,我将停止计时器并导航到另一个 viewController 和 如果我将 COStatus 设为 0 90 秒。我正在停止计时器并显示警报。
但这里我的问题是计时器没有停止。比如,如果我得到 COStatus 为 1,则后台计时器正在运行。因此,在 90 秒后收到警报消息。
以同样的方式直到 90 秒。如果我得到 COStatus as 0 表示正在显示警报。此警报会不断重复。
如何做到这一点?谁能帮我解决这个问题
var myTimer : Timer?
var timeController : Bool = true
func myAPICall(){
self.loadingview()
if self.myTimer == nil {
self.myTimer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.COStatusAPI), userInfo: nil, repeats: self.timeController)
}
}
@objc func COStatusAPI(){
if COStatus == 0{
self.timeController = true
let when = DispatchTime.now() + 90
DispatchQueue.main.asyncAfter(deadline: when) {
self.timeController = false
if self.acceptOrRejectTimer != nil {
self.acceptOrRejectTimer!.invalidate()
self.acceptOrRejectTimer = nil
}
self.hideloadingView()
//showing alert
}
}
if COStatus == 1{
self.timeController = false
if self.acceptOrRejectTimer != nil {
self.acceptOrRejectTimer!.invalidate()
self.acceptOrRejectTimer = nil
}
self.hideloadingview()
//navigating to next view controller
}
}
【问题讨论】:
-
如果您使用 pod,那么 AsyncTimer 可能会对您有所帮助
-
谢谢@AdrianBobrowski。 vadian 的代码就像魅力一样。现在不需要使用dispatchqueue、异步定时器等等
标签: ios swift timer nstimer dispatch-queue