每天在固定时间运行任务

时间:2018-07-02 12:10:58

标签: ios swift timer repeat

我想每天在固定时间(例如每天上午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")
}

选择器功能不是在指定的时间运行,而是在我每次运行应用程序时而不是在指定的时间执行。我该怎么解决?

编辑:我也需要从后台运行它。我将在我的应用中使用位置服务。

1 个答案:

答案 0 :(得分:3)

不使用推送通知就无法实现目标。 Timer正在使用运行循环,因此无法在后台运行。也没有用于定期进行API调用的后台模式。

唯一的选择是每天在指定的时间从您的服务器发送推送通知,并响应于在您的应用程序中收到推送通知,进行API调用。当然,您需要互联网连接才能使推送通知正常工作,但是由于您要进行API调用,所以这没有什么不同,因为您需要互联网连接才能使API调用成功。