Обновление просмотра каждый день - PullRequest
0 голосов
/ 16 мая 2019

ищет возможность обновлять вид каждый день.

это то, что я пробовал ... но он даже не печатает "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()
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Более простое решение: сохраните только целое число дня и добавьте наблюдателя, который будет уведомлен об изменении дня

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")
}
0 голосов
/ 16 мая 2019

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

Вышеуказанный блок будет выполняться только в том случае, если найдено значение. Вы не устанавливаете значение по умолчанию в UserDefaults для ключа lastRe - поэтому код никогда не выполняется.

Попробуйте установить значение по умолчанию:

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

...