创建一个每 24 小时运行一次的活动?

Posted

技术标签:

【中文标题】创建一个每 24 小时运行一次的活动?【英文标题】:Create an event that runs every 24 hours? 【发布时间】:2015-10-03 21:52:18 【问题描述】:

我在“每天报价”项目中有一个 Swift 数据文件,其中包含 500 条报价,我想在每次变成新的一天时致电 updateQuote()

引用字符串变量更新QuoteViewcontroller 中的UILabel 和UILocalNotifiication() 中的alertBody 字符串。

参考如下:

var quotes:[Quote] = quoteData
var quote: String!
var counter = 0


func updateQuote() 

    if counter == quotes.count 

        counter = 0

     else 

        quote = quotes[counter].quoteTitle

        counter++ 
    

我试图用NSDate()做这样的事情:

let userCalendar = NSCalendar.currentCalendar()
let dayCalendarUnit: NSCalendarUnit = [.Day]
let DayDifference = userCalendar.components(
    dayCalendarUnit,
    fromDate: lastDate,
    toDate: nowDate,
    options: [])

var difference = DayDifference.day

if difference > 0 

updateQuote()
lastDate = nowDate 

但该逻辑似乎不起作用,因为我不确定如何在初始运行时填充 lastDate 和 nowDate。

我也不确定将上述功能放在哪里,以便在应用程序在后台运行时继续检查。

任何见解都会很棒。

【问题讨论】:

没有地方可以放置该函数,因此它将“继续在后台运行”。这会缩短电池寿命,因此 Apple 不允许这样做。 本地通知只有在用户点击它时才会调用您的代码。如果他们不这样做,它将继续提供相同的文本。 OP实际上在这里有几个问题; 1.如何处理初始日期比较? (微不足道,只检查零)但更重要的是 2.如何保持,在后台检查?这真的不可能。我已经看到了很多类似的问题。一些可能的解决方案是 1. 推送通知。 2. 后台获取 3. 一次连续几天安排多个本地通知,并在您的应用启动时更新这些通知。如果您没有服务器,3 可能是最好的 Alexis,您希望何时显示新报价,在用户打开应用程序时显示在应用程序内,还是在本地通知内显示?如果是后者,那么您将需要使用 scheduleLocalNotification(_ notification: UILocalNotification)。 【参考方案1】:

如果您只是希望应用程序每天在 UILabel 中显示不同的报价,那么显而易见的解决方案是将今天的日期转换为整数,然后使用该整数索引到您的数组中。像这样的东西可以做到...

let daysSince1970 = NSDate().timeIntervalSince1970 / 60 / 60 / 24
let index = Int(daysSince1970) % quotes.count
myLabel.text = quotes[index]

以上代码不必一直运行,只需要在应用移到前台时运行即可。

要将当天的报价放入通知中...在您的 UI 中的某个位置,您应该询问用户他们希望何时发送报价。一旦你有时间,加载几个一次性通知,每个通知中都有不同的报价,并设置在不同的日期交付(选择具有与上述相同算法的报价,除了每天推进一次索引。)我认为苹果允许您以这种方式加载 64 条通知。

【讨论】:

太棒了 - 非常感谢,丹尼尔。我将尝试上述方法,看看它是否有效。您认为我希望在用户在当天的任何时间打开应用程序时显示每日报价标签是正确的。此外,根据用户输入的时间设置,在本地通知中提供当天的报价。

以上是关于创建一个每 24 小时运行一次的活动?的主要内容,如果未能解决你的问题,请参考以下文章

cron 命令每 12 小时运行一次

每 24 小时运行一个 php 任务

安排定期 mysql 脚本每小时自动运行一次

如何为每(数)毫秒运行一次的游戏制作“循环”?

如何防止气流回填dag运行?

如何每小时运行一次 logrotate