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

时间:2015-10-03 21:52:18

标签: ios swift nsdate uilocalnotification nscalendar

我在"引用一天"中有一个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。

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

任何见解都会很棒。

1 个答案:

答案 0 :(得分:1)

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

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

上面的代码不必经常运行,只需在应用程序移动到前台时运行。

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

相关问题