首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多次触发功能

多次触发功能
EN

Stack Overflow用户
提问于 2015-08-07 14:37:51
回答 1查看 41关注 0票数 0

当用户每天打开该应用程序两次以上时,我如何才能启动该功能?例如,今天是星期一。当天,用户打开应用程序2次,而不是触发一个函数。但第二天,这一进程必须重新开始。

我有这样的代码来保存应用程序启动的号码:

代码语言:javascript
运行
复制
var numLaunches = NSUserDefaults.standardUserDefaults().integerForKey("numLaunches") + 1

但是,结合当前的情况,我该如何做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-07 19:18:58

您可以使用这个类来存储有关某一天的信息,以及您的应用程序在指定日期启动的次数。

代码语言:javascript
运行
复制
@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中即可。

代码语言:javascript
运行
复制
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中调用它。

代码语言:javascript
运行
复制
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    checkStats()
    return true
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31880395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档