每天更新视图

Update View every day

寻找每天更新视图的可能性。

这是我试过的...但它甚至不打印 "test2"

var WordNumber = 0
override func viewDidLoad() {
    super.viewDidLoad()
    let userDefault = UserDefaults.standard
    if let lastRe = userDefault.dictionary(forKey: "lastRe") {
        print("test2")
        if let letztesDatum = lastRe ["date"] as? NSDate {
            print("test3")
            if let index = lastRe ["index"] as? Int {
                print("test4")
                if abs(letztesDatum.timeIntervalSinceNow) > 1 {
                    print("test5")
                    WordNumber = index + 1
                    let  _ : [NSObject : AnyObject] = ["date" as NSObject : NSDate(),
                                                       "index" as NSObject : WordNumber as AnyObject]
                }
                print("test6")
                nextDay() //update lbl
                userDefault.set(lastRe, forKey: "lastRe")
                userDefault.synchronize()
            }
        }
    }
}

if let lastRe = userDefault.dictionary(forKey: "lastRe")

以上只会在找到值时执行该块。您没有在 UserDefaults 中为键 lastRe 设置默认值 – 因此代码永远不会执行。

尝试设置默认值:

UserDefaults.Standard.set("my initial value here", forKey: "lastRe")

更简单的解决方案:仅保存日期整数并添加一个观察者以在日期更改时收到通知

override func viewDidLoad() {
    super.viewDidLoad()
    let today = Calendar.current.component(.day, from: Date())
    let lastRe =  UserDefaults.standard.integer(forKey: "lastRe")
    if today != lastRe {
        updateView(day: today)
    }
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    NotificationCenter.default.addObserver(forName: .NSCalendarDayChanged, object:nil, queue: .main) { [weak self] _ in 
       let today = Calendar.current.component(.day, from: Date())
       self?.updateView(day: today)
    }
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    NotificationCenter.default.removeObserver(self, name:.NSCalendarDayChanged, object:nil)
}

func updateView(day : Int) {
    nextDay()
    UserDefaults.standard.set(day, forKey: "lastRe")
}