测试日期/用户默认条纹跟踪
Posted
技术标签:
【中文标题】测试日期/用户默认条纹跟踪【英文标题】:Testing date/userdefault streak tracking 【发布时间】:2021-12-18 09:21:06 【问题描述】:我想在我的 Swift 应用程序中跟踪条纹。我将以下代码放在场景委托中。这一切都运行得很愉快,但是如果我第二天从口袋里拿出我的应用程序,loginCount 并没有增加。
问题 1:我的代码有什么问题吗?
问题 2:如何模拟/单元测试“明天”,同时使用 UserDefault 元素?
let myCalendar = Calendar.current
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore
var logins = UserDefaults.standard.integer(forKey: "loginCount")
if let lastLogin = UserDefaults.standard.object(forKey: "lastLoginDate") as? Date
if !myCalendar.isDateInToday(lastLogin)
UserDefaults.standard.set(logins + 1, forKey: "loginCount")
UserDefaults.standard.set(Date(), forKey: "lastLoginDate")
window.rootViewController = ViewController() // Main flow controller.
window.makeKeyAndVisible()
self.window = window
else
UserDefaults.standard.set(Date(), forKey: "lastLoginDate")
UserDefaults.standard.set(true, forKey: "launchedBefore")
UserDefaults.standard.set(1, forKey: "loginCount")
window.rootViewController = introViewController() // Onboarding controller.
window.makeKeyAndVisible()
self.window = window
【问题讨论】:
我在func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
中调用它我想知道如果我的应用程序在一夜之间在后台保持活动状态时不会调用它......?我应该从其他地方打电话吗?这很难,因为我不能让它过夜来测试我的预感!
如果你登录你也需要注销,对吧?由于您的登录似乎只是关于写入 UserDefaults 您需要自己提供此逻辑。可能有一个快捷方式,但具体取决于您计算的确切时间,您可以将 UserDefaults 中的日期与当前日期进行比较,如果不一样,则您有一个“新”登录。
澄清一下,当我写的不一样时,我的意思不是同一天。
我写的代码使用if !myCalendar.isDateInToday(lastLogin)
检查增加计数的逻辑——只是昨晚没有增加。我的问题分为两部分:1)任何明显的原因 2)除了每天早上醒来并希望检查之外,还有其他方法可以测试我的代码
如果您没有任何特定的注销逻辑来重置launchBefore,则需要在检查launchBefore之前检查lastLoginDate。实际上,我想知道您是否甚至需要 launchBefore 或者您是否可以只检查日期?
【参考方案1】:
我发现了我的错误。
我的代码是正确的 - 但它需要放在
func sceneWillEnterForeground(_ scene: UIScene)
。
在它出现之前func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
当应用程序在后台重新打开时不会调用它。
【讨论】:
以上是关于测试日期/用户默认条纹跟踪的主要内容,如果未能解决你的问题,请参考以下文章
table给table表格设置一个通用的css3样式(默认有斑马条纹)