web-dev-qa-db-ja.com

NSUserDefaultsからNSDateオブジェクトを取得して割り当てる方法は?

ストップウォッチアプリケーションを作成していますが、ユーザーがアプリケーションを閉じる前に開始日を保存し、ユーザーがアプリケーションを再度開いたときに取得する必要があります。

そのため、たとえば、ユーザーがストップウォッチを起動してからアプリケーションを閉じ、しばらくしてからアプリケーションを再び開いた場合、ストップウォッチが実行されている場合、アプリは実行時間に開始から終了までの時間を追加する必要があります。

これを処理するビューコントローラーで2つの関数を作成しました。コードは次のとおりです。

    override func viewWillAppear(animated: Bool)
    {

      let startTimedefault:NSUserDefaults = NSUserDefaults.standardUserDefaults()

      let startTimesaved:NSDate = startTimedefault.objectForKey("start time") // This line is buggy


      if(launchBool == true)
      {      
         timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "fireStopWatch", userInfo: nil, repeats: true)

         startTime = startTimesaved
      }

      if(launchBool == false)
      {
         timer.invalidate()
      }

    }

    override func viewWillDisappear(animated: Bool)
    {
       NSUserDefaults.standardUserDefaults().setObject(launchBool, forKey: "Start/Stop")
       NSUserDefaults.standardUserDefaults().setObject(startTime, forKey: "start time")
       NSUserDefaults.standardUserDefaults().setObject(elapsedTime, forKey: "elapsed time")
    }

ここでStackOverflowの投稿をいくつか確認しました。

NSDateをNSUserDefaultsに保存する最適な方法は何ですか?

iOS-NSDateをNSUserDefaultsに保存できません

37
Atharva Vaidya

日付オブジェクトを次のように設定します。

UserDefaults.standard.set(Date(), forKey:"yourKey")

次を使用して取得します。

UserDefaults.standard.object(forKey: "yourKey") as! Date
89

Swift 3/4/5Dateの代わりにNSDate(type alias)を使用:

let yourDate = UserDefaults.standard.object(forKey: "yourKey") as? Date
UserDefaults.standard.set(yourDate, forKey: "yourKey")

UserDefaultsの "yourKey"の下にまだ日付がない場合は、条件付きキャスト演算子as?を使用して、crashを避けてください。

29
KlimczakM