【发布时间】: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)。
标签: ios swift nsdate uilocalnotification nscalendar