当用户每天打开该应用程序两次以上时,我如何才能启动该功能?例如,今天是星期一。当天,用户打开应用程序2次,而不是触发一个函数。但第二天,这一进程必须重新开始。
我有这样的代码来保存应用程序启动的号码:
var numLaunches = NSUserDefaults.standardUserDefaults().integerForKey("numLaunches") + 1
但是,结合当前的情况,我该如何做到这一点呢?
发布于 2015-08-07 19:18:58
您可以使用这个类来存储有关某一天的信息,以及您的应用程序在指定日期启动的次数。
@objc class MyStats : NSObject, NSCoding {
private var date: NSDate
private(set) var launchCounter: Int
override init() {
date = NSDate()
launchCounter = 1
}
@objc func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(NSDate(), forKey: "date")
aCoder.encodeInteger(launchCounter, forKey: "launchCounter")
}
@objc required init(coder aDecoder: NSCoder) {
self.date = aDecoder.decodeObjectForKey("date") as! NSDate
self.launchCounter = aDecoder.decodeIntegerForKey("launchCounter")
}
func increaseLaunchCounter() {
launchCounter++
}
var isAboutToday: Bool {
let calendar = NSCalendar.currentCalendar()
let unitFlags = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay
let comp1 = calendar.components(unitFlags, fromDate: NSDate())
let comp2 = calendar.components(unitFlags, fromDate: self.date)
return comp1.day == comp2.day && comp1.month == comp2.month && comp1.year == comp2.year
}
func save() {
let data = NSKeyedArchiver.archivedDataWithRootObject(self)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "stats")
}
class func loadStats() -> MyStats? {
if let
data = NSUserDefaults.standardUserDefaults().objectForKey("stats") as? NSData,
stats = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? MyStats {
return stats
}
return nil
}
}
要使用它,只需将此函数添加到AppDelegate
中即可。
private func checkStats() {
if let stats = MyStats.loadStats() where stats.isAboutToday {
stats.increaseLaunchCounter()
stats.save()
print("The app has been launched \(stats.launchCounter) today")
// call your function...
} else {
MyStats().save()
}
}
最后在application:didFinishLaunchingWithOptions
中调用它。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
checkStats()
return true
}
https://stackoverflow.com/questions/31880395
复制相似问题