首页 文章

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

提问于
浏览
0

我正在尝试使用 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

    使用如下

    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
             }
        }
    }
    

相关问题