私は、ユーザーがViewControllerの1人で費やした時間を追跡しようとしています。私が最初にそうように、静的NSDate変数とTimeManager構造体を作成することでこれをやっている:静的NSDate変数は、関数呼び出し間でリセットを維持します
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" 関数を呼び出すと、 "タイムスタンプが" 私はビューがロードされたときに設定していた、それを渡す:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
print("\(TimeManager.timeStamp)")
TimeManager.globalManager.setSessionDuration(TimeManager.timeStamp, controller: "BrowseViewController")
...
しかし、print文を通じて私が発見したこと、私が何らかの理由で、関数に渡し、現在の時刻に「TIMESTAMP」変数のリセット:
は、私は私のiPhone上でタイマーを設定3分で別のビューコントローラーに切り替えたので、「viewWillDisappear」と呼んでいる時間にリセットされていることがわかりました。私はここで少し犠牲になっています。なぜ誰がこのことが起こっているのか教えてください。
func setSessionDuration(inout startupTime: NSDate, controller: String) {
let timeInterval = ((startupTime.timeIntervalSinceNow) * -1)
LocalUser.user.timePerController[controller]! += timeInterval
}
参照することによって、それを渡す&TimeManager.timeStamp
からviewWillDisappear
変更TimeManager.timeStamp
中:
TimeManager.globalManager.setSessionDuration(&TimeManager.timeStamp, controller: "BrowseViewController")
残念ながら、不変変数(NSDate)で "inout"を使用することはできません。 –