代码之家  ›  专栏  ›  技术社区  ›  Sujal

每天定时运行任务

  •  1
  • Sujal  · 技术社区  · 8 年前

    我想每天固定时间运行一个函数(进行API调用),比如每天上午10点和晚上10点。Swift中的cronjob等同于什么?

    我尝试将计时器实现为:

    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 回复  |  直到 8 年前
        1
  •  3
  •   Dávid Pásztor    8 年前

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

    唯一的选择是每天在指定的时间从服务器发送推送通知,并响应应用程序中的推送通知进行API调用。当然,推送通知需要Internet连接才能工作,但是由于您想进行API调用,这不会有什么区别,因为无论如何,您都需要Internet连接才能使API调用成功。