我使用“userdefaults”存储用户重新加载页面的日期时间。但是,我发现即使时间过了,它也不会刷新
final class ModelData: ObservableObject {
@Published var lastLaunchDate: Date = UserDefaults.standard.value(forKey: "lastLaunch") as? Date ?? Date()
func getTimeStamp() -> Date {
let now_components = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: Date())
let lastLaunch_components = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: lastLaunchDate)
print(now_components.minute, lastLaunch_components.minute)
if now_components.minute != lastLaunch_components.minute {
lastLaunchDate = Date()
UserDefaults.standard.setValue(lastLaunchDate, forKey: "lastLaunch")
}
print(now_components.minute, lastLaunch_components.minute)
}
return lastLaunchDate
}
}
因为我正在测试,所以我用“分钟”来简化我的测试。我希望当每分钟发生变化时,上面的代码会更新我的UserDefaults。
struct HomeView: View {
@EnvironmentObject var modelData: ModelData
var body: some View {
Text("\(modelData.getTimeStamp())")
}
}
我发现我浏览到另一个页面,回到HomeView。时间戳根本没有更新。我打印了lastLaunchDate,它也没有更新。
我发现我浏览到另一个页面,回到HomeView。时间戳根本没有更新。
如果导航回父视图
,SwiftUI不会重新呈现它,除非发生更改。
相反...您将需要使用.onopere
视图修饰符来调用函数。
此外,文本(“\(ModelData.GetTimestamp())”)
不是很快速
尤其是在您的情况下。
由于您有@published var lastlaunchdate
,请按其本意使用它:
Text("\(modelData.lastLaunchDate)")
现在,当LastLaunchDate
更改时,SwifTui
引擎将自动更新视图
。
final class ModelData: ObservableObject {
@Published var lastLaunchDate = UserDefaults.standard.value(forKey: "lastLaunch") as? Date ?? Date()
func refresh() {
let compareDate = Date()
let refreshInterval = TimeInterval(3) //3 second interval for test purpose
if compareDate.timeIntervalSince(lastLaunchDate) > refreshInterval {
lastLaunchDate = compareDate
UserDefaults.standard.setValue(lastLaunchDate, forKey: "lastLaunch")
}
}
}
struct ContentView: View {
@EnvironmentObject var modelData: ModelData
var body: some View {
NavigationView {
VStack {
Text("\(modelData.lastLaunchDate)")
NavigationLink(destination: Text("Destination"),
label: { Text("Navigate") })
}
.onAppear {
modelData.refresh()
}
}
}
}
注意:如果now_components.minute!=lastlaunch_components.minute
容易出错。
示例:比较00:01的last-update-time和01:01的current-time。
检查将失败。
我现在正在学习React,但在重新渲染组件时遇到了问题。应用程序。js代码: 问题是不是最新的。它总是弱智,这是以前的状态。我试图调用一个在和的回调中,但是它仍然不起作用,我不知道为什么。
2.19 刷新状态查询 2.19.1 描述 返回刷新进度 2.19.2 请求地址 地址: https://api.bokecs.com/queryrefresh/{package_id} 2.19.3 请求方式 GET 2.19.4 请求参数 参数名称 是否必须 参数描述 package_id 是 刷新接口中code为200时返回的message 2.19.5 请求格式 json 2.19.6 举
我的应用程序使用Firebase API进行用户身份验证,将登录状态保存为Vuex状态下的布尔值。 当用户登录时,我设置登录状态并相应地有条件地显示登录/注销按钮。 但是当页面刷新时,vue应用的状态丢失并重置为默认 这会导致一个问题,即使用户登录并刷新页面,登录状态也会被设置为false,并且显示登录按钮而不是注销按钮,即使用户保持登录状态... 我该怎么做才能防止这种行为 我应该使用cooki
我正在使用Angular材质选项卡,并且我的所有元素在切换到不同的选项卡(具有克隆网格)后都变得陈旧。不是对我网格上的所有20个元素都这样做,而是有办法刷新页面上的所有元素,这样我的引用就不会陈旧? 我们正在努力获取网格上的价值。 陈旧元素引用:元素未附加到页面文档
我们正在构建一个具有两个流的应用程序: 大量信息流 我们希望连接这两个流以获得共享状态,以便第一个流可以使用第二个状态进行扩展。 每天左右,拼花文件(第二流的源代码)都会更新,这需要我们清除第二流的状态并重建它(可能需要大约2分钟)。 问题是,我们可以在该进程运行时阻止/延迟来自第一流的消息吗? 谢谢。
我正在使用本教程学习AngularJS和ionic framework: http://www.htmlxprs.com/post/12/tutorial-on-using-parse-rest-api-and-ionic-framework-together 直到我在createTodo状态下创建一个新项,然后调用$state时,一切都很正常。go('todos')要返回到我的项目列表,以下是创