使用Timer
每4秒调用一个函数如果我点击同一个viewController中的按钮,我将导航到谷歌地图。
导航到谷歌地图后,该功能未被调用
这是按钮操作
@IBAction func navigateBtnClicked(_ sender: Any) {
if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps://")!) {
let googleMapUrlString: String = "comgooglemaps://?saddr=&daddr=\(CDouble(pickupLat)),\(CDouble(pickupLong))&mode=driving"
UIApplication.shared.open(URL(string: googleMapUrlString)!, options: [:], completionHandler: nil)
}
}
这是我使用计时器的代码
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global(qos: .default).async(execute: {
sendingLatLongTimer = Timer(timeInterval: 4, target: self, selector: #selector(self.webserviceCall), userInfo: nil, repeats: true)
RunLoop.main.add(self.sendingLatLongTimer!, forMode: .commonModes)
})
}
答案 0 :(得分:0)
实际上你可以在后台使用Timer,但是你必须在看到gist之前创建BackgroundTask:https://gist.github.com/phatmann/e96958529cc86ff584a9 应注意IOS 11中的后台任务最长续航时间为180秒,后台任务到期后,您的应用程序将进入暂停模式,如果您需要定期在后台执行某项工作,请使用来自服务器的静默推送。
private func startBarkgroundTaskTimer(time: TimeInterval) {
backgroundTaskTimer?.invalidate()
backgroundTaskTimer = nil
backgroundTaskTimer = Timer.scheduledTimer(
withTimeInterval: time,
repeats: true,
block: { [weak self] _ in
guard let `self` = self, UIApplication.isBackground else { return }
Logger.log("update location from BG")
})
}