我想每天在固定时间(例如每天上午10点和晚上10点)运行一个函数(进行api调用)。迅捷的cronjob相当于什么?
我尝试将Timer实现为:
var dateComponents = DateComponents()
dateComponents.timeZone = TimeZone(abbreviation: "NPT")
dateComponents.hour = 10
dateComponents.minute = 00
let userCalendar = Calendar.current
let myTime = userCalendar.date(from: dateComponents)
let timer = Timer(fireAt: myTime!, interval: 0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
选择器功能:
@objc func updateTimer() {
print("Hello")
}
选择器功能不是在指定的时间运行,而是在我每次运行应用程序时而不是在指定的时间执行。我该怎么解决?
编辑:我也需要从后台运行它。我将在我的应用中使用位置服务。
答案 0 :(得分:3)
不使用推送通知就无法实现目标。 Timer
正在使用运行循环,因此无法在后台运行。也没有用于定期进行API调用的后台模式。
唯一的选择是每天在指定的时间从您的服务器发送推送通知,并响应于在您的应用程序中收到推送通知,进行API调用。当然,您需要互联网连接才能使推送通知正常工作,但是由于您要进行API调用,所以这没有什么不同,因为您需要互联网连接才能使API调用成功。