如何在 12 小时后清除特定密钥的 UserDefault
How to clear UserDefault for a specific key after 12 hours
在用户 login.After 研究和尝试后,我试图通过设置计时器来删除用户默认密钥,我发现当应用程序进入后台时计时器不会 运行。
如果您想在后台执行某些任务,您必须为应用程序启用后台模式。但这只会让 运行 应用程序在后台运行几分钟。
除此之外,您应该保存登录时间的时间戳,并检查每个 didFinishLaunchingWithOptions
当前时间和您保存的时间的时差。
使用 DispatchQueue.global 而不是 NSTimer ,将全局队列设置为后台。并在执行中使用 DispatchWorkItem.
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + TimeInterval(yourtime interval value), execute: workItem)
var workItem = DispatchWorkItem {
// write your flush userdefault code here
}
使用 workItem 后将其取消。
self.workItem?.cancel()
您可以将 loginDate
存储在用户默认值中,并在 applicationDidBecomeActive(_ application: UIApplication)
中使用 Date().timeIntervalSince(loginDate) > 12 * 60 * 60
进行检查
试试这个
DispatchQueue.global(qos: .background).async {
// Write your code here timer running while app will not turminate
}
在用户 login.After 研究和尝试后,我试图通过设置计时器来删除用户默认密钥,我发现当应用程序进入后台时计时器不会 运行。
如果您想在后台执行某些任务,您必须为应用程序启用后台模式。但这只会让 运行 应用程序在后台运行几分钟。
除此之外,您应该保存登录时间的时间戳,并检查每个 didFinishLaunchingWithOptions
当前时间和您保存的时间的时差。
使用 DispatchQueue.global 而不是 NSTimer ,将全局队列设置为后台。并在执行中使用 DispatchWorkItem.
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + TimeInterval(yourtime interval value), execute: workItem)
var workItem = DispatchWorkItem {
// write your flush userdefault code here
}
使用 workItem 后将其取消。
self.workItem?.cancel()
您可以将 loginDate
存储在用户默认值中,并在 applicationDidBecomeActive(_ application: UIApplication)
Date().timeIntervalSince(loginDate) > 12 * 60 * 60
进行检查
试试这个
DispatchQueue.global(qos: .background).async {
// Write your code here timer running while app will not turminate
}