我想创建一个应用程序,因为在特定时间调用API。我已经在前台完成了,但是当应用程序在后台运行时,它没有执行。我该如何解决这个问题?
我的代码如下:
@objc func runCode() {
print("runcode")
timeLabel.text = "Pls select time"
}
@IBAction func dateChange(_ sender: UIDatePicker) {
if (timer != nil) {
timer.invalidate()
}
print("print \(sender.date)")
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm E, d MMM y"
let somedateString = dateFormatter.string(from: sender.date)
print(somedateString)
timer = Timer(fireAt: sender.date, interval: 0, target: self, selector: #selector(runCode), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
timeLabel.text = "api will trigger at \(somedateString)"
}
@IBAction func switchAction(_ sender: UISwitch) {
if stateSwitch.isOn {
date.isHidden = false
print("The Switch is on")
timeLabel.text = "Pls select time"
} else {
date.isHidden = true
if (timer != nil) {
timer.invalidate()
}
timeLabel.text = "Timer not activated"
print("Timer not activated")
}
}
答案 0 :(得分:0)
如果要从后台调用api,则线程必须首先在后台。 此外,您可以注册后台获取:https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/updating_your_app_with_background_app_refresh
答案 1 :(得分:0)
不能。您可以注册进行后台处理,以便为您的应用分配一些时间来进行一些工作。但是,您无法控制何时分配时间。它可以像每20分钟左右一样频繁,但也可以更长。