Swift 每天更新视图
寻找每天更新视图的可能性 这就是我尝试过的。。。但它甚至没有打印test2Swift 每天更新视图,swift,userdefaults,Swift,Userdefaults,寻找每天更新视图的可能性 这就是我尝试过的。。。但它甚至没有打印test2 var WordNumber = 0 override func viewDidLoad() { super.viewDidLoad() let userDefault = UserDefaults.standard if let lastRe = userDefault.dictionary(forKey: "lastRe") { print("test2") i
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()
}
}
}
}
如果让lastRe=userDefault.dictionaryWorkey:lastRe
只有在找到值时,上述命令才会执行该块。您没有在UserDefaults中为key lastRe设置默认值,因此代码永远不会执行
尝试设置默认值:
UserDefaults.Standard.setmy 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")
}
请记住,首次安装应用程序时,UserDefaults将没有值。因此,如果您的代码只在检查是否有值的代码中添加一个值,那么它将永远不会有值。顺便说一句,synchronize是过时的。不要用它,只要建议你永远不要使用金字塔。这将使您变得更加复杂。是的,关于你的打印问题,我认为@rmaddy是正确的+1票给你,你不想使用这个解决方案。它将清除以后写入的任何值。谢谢!这很有效。是否有机会每天在不同的手机上显示相同的视图?这不适用于UserDefault,对吗?不适用于其他手机,为此,您需要像CloudKit这样的同步服务。