如何使用UserDefaults启动的应用之间保存状态?

时间:2018-11-18 18:30:11

标签: ios swift

我尝试使用UILabel显示时间/日期(日期或NSDate),并在启动应用程序时使用以前每次启动的DateFormatter进行格式化。

因此,每次我启动该应用程序时,屏幕上都会显示另一个日期。

例如,如果这是第一次启动,它将显示Nov 18 2018, 13:15。第二次启动应显示

Nov 18 2018, 13:15 
Nov 18 2018, 13:16

它的第三次启动应该显示类似

 Nov 18 2018, 13:15 
 Nov 18 2018, 13:16
 Nov 18 2018, 13:17

当前,我的代码仅显示启动时间,但不记录以前的启动。如果有人能给我一些指导,说明如何使用UserDefaults来实现这一目标,我将不胜感激!

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var Timelabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        let dateFormatterPrint = DateFormatter()
        dateFormatterPrint.dateFormat = "MMM dd, yyyy HH:mm:ss"

        let DisplayTime: Date = Date()
        print(dateFormatterPrint.string(from: DisplayTime))
        Timelabel.text = "Current Time: \(dateFormatterPrint.string(from: DisplayTime))"

    }

}

1 个答案:

答案 0 :(得分:0)

按以下方式使用

class ViewController: UIViewController {

    // your other @IBOutlet / properties
    let ARR_KEY = "launch_time"

    override func viewDidLoad() {
        // your other code.
        // remove your TimeLabel.text = ... line

        let formattedDateTime = dateFormatterPrint.string(from: DisplayTime)


        // storing the launch date time
        if var arr = UserDefaults.standard.stringArray(forKey: ARR_KEY){
            arr.append(formattedDateTime)
            UserDefaults.standard.set(arr, forKey: ARR_KEY)
        } else {
            UserDefaults.standard.set([formattedDateTime], forKey: ARR_KEY)       
        }

        displayLaunchTimeInSimpleLabel()
    }

    func displayLaunchTimeInSimpleLabel() {
        if var arr = UserDefaults.standard.stringArray(forKey: ARR_KEY){
               var string = ""
               for launchTime in arr {
                   string = string + launchTime + "\n"
               }
               Timelabel.text = string
         }
    }
}