2016-07-20 1 views
0

私は、ユーザーが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」変数のリセット:

enter image description here

は、私は私の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") 

答えて

0

はあなたの関数でsetSessionDuration startupTime引数をinoutを使用してみてください。あなたのコードの他の場所では、timeStamp = NSDate()?

別の考えられる原因は、同じビューコントローラー(それを閉じるのではなく)にセグを実行していて、表示されている値が2番目のインスタンスのviewDidLoadのものである可能性があります。それぞれの場所にタイムスタンプとともに関数名を表示して、これが正しいかどうかを確認することができます。

+0

残念ながら、不変変数(NSDate)で "inout"を使用することはできません。 –

0

それはあなたもTimeManagerを設定することが考えられ

+0

他のすべてのView ControllerでTimeManager.timeStampを同じ方法で設定しました(まだ完了していませんが計画通りです)。私はそれぞれのセッションの持続時間を持つことができますが、BrowseViewControllerの読み込みと消滅の間に、私はそれをリセットしないと確信しています。 –

関連する問題