计算从上次应用程序终止到下次启动的时间段(以秒为单位)

时间:2017-01-14 22:46:06

标签: ios swift xcode nsdate nsuserdefaults

我需要知道从应用程序终止的那一刻起到应用程序再次启动的时间。我猜你必须在appIsTerminated时将它保存在appDelegate中来存储startDate。然后你必须在appDidLaunch中访问该值,同样在appDelegate中,然后计算这些时间之间的差异。我需要秒的差异,我想在viewController中使用差异。我如何在swift 3,Xcode 8中执行此操作?

2 个答案:

答案 0 :(得分:3)

Date类有一个timeIntervalSince函数:

date2.timeIntervalSince(date1)

返回的TimeInterval是从date1date2的秒数。

如果您想在视图控制器中使用它,可以将其保存在UserDefaults之类的地方,然后从那里访问它。

答案 1 :(得分:2)

是的,你是对的,它是最简单的解决方案。

public func applicationDidFinishLaunching(_ application: UIApplication){

    UserDefaults.standard.set(Date(), forKey: "latestLaunchDate")
    // your code
    return true
}


public func applicationWillTerminate(_ application: UIApplication) {
     UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
     //just to ensure that it is saved
     UserDefaults.standard.syncronize()
}

然后在你的ViewController中

class YourViewController: UIViewController {

    func method() {
         if let launchDate = UserDefaults.standard.object(forKey:  "latestLaunchDate") as? Date,
            let terminationDate = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Date
         {
             // your duration
             let terminationDuration = launchDate.timeIntervalSince(terminationDate)
         }
    }
}

因此,在上面的示例中,只有在两个日期(启动和终止都已设置)时才会到达if主体。 更好的方法是为此目的定义一些全局常量,这样你就不会在字符串中输入拼写错误。