gpt4 book ai didi

ios - 静态 NSDate 变量在函数调用之间不断重置

转载 作者:行者123 更新时间:2023-11-30 13:13:26 25 4
gpt4 key购买 nike

我正在尝试跟踪用户在我的一个 ViewController 中花费的时间。我首先使用静态 NSDate 变量创建一个 TimeManager 结构,如下所示:

struct TimeManager {
static var timeStamp: NSDate!
static let globalManager = TimeManager()

func setSessionDuration(startupTime: NSDate, controller: String) {
let timeInterval = ( (startupTime.timeIntervalSinceNow) * -1)
LocalUser.user.timePerController[controller]! += timeInterval
}
}

然后,在 ViewController 的“viewDidLoad”方法中,我将 TimeManager 的“timeStamp”变量设置为新初始化的 NSDate() :

override func viewDidLoad() {
super.viewDidLoad()
LocalUser.user.mostRecentAction = "Browsed Item Feed."
TimeManager.timeStamp = NSDate()
print("\(TimeManager.timeStamp)")
...

最后,在“viewWillDisappear”中,我调用“setSessionDuration”函数并向其传递我在加载 View 时设置的“timeStamp”:

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
print("\(TimeManager.timeStamp)")
TimeManager.globalManager.setSessionDuration(TimeManager.timeStamp, controller: "BrowseViewController")
...

但是,通过打印语句,我发现当我将“timeStamp”变量传递给函数时,无论出于何种原因,它都会重置为当前时间:

enter image description here

我在 iPhone 上将计时器设置为 3 分钟,并在 3 分钟标记处切换到不同的 View Controller ,因此我可以看到发生的情况是“timeStamp”被重置为我调用“viewWillDisappear”的任何时间”。我在这里有点不知所措 - 谁能告诉我为什么会发生这种情况?

最佳答案

尝试在函数 setSessionDuration 中使用 inout 启动时间参数:

 func setSessionDuration(inout startupTime: NSDate, controller: String) {
let timeInterval = ( (startupTime.timeIntervalSinceNow) * -1)
LocalUser.user.timePerController[controller]! += timeInterval
}

并在 viewWillDisappear 中将 TimeManager.timeStamp 更改为 &TimeManager.timeStamp 以通过引用传递它:

TimeManager.globalManager.setSessionDuration(&TimeManager.timeStamp, controller: "BrowseViewController")

关于ios - 静态 NSDate 变量在函数调用之间不断重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38487202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com