如何从NSUserDefaults检索和分配NSDate对象?

问题描述 投票:37回答:2

我正在构建一个秒表应用程序,我需要在用户关闭应用程序之前存储开始日期,并在用户再次打开应用程序时需要检索它。

因此,例如,如果用户启动秒表然后关闭应用程序,然后在一段时间后再次打开应用程序,应用程序应该在开始和结束之间添加时间,如果秒表正在运行。

我在我的viewcontroller中创建了两个处理它的函数。这是代码:

    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上看了几篇帖子:

What's the optimum way of storing an NSDate in NSUserDefaults?

iOS - Not able to store NSDate into NSUserDefaults

ios xcode swift xcode6
2个回答
89
投票

设置日期对象如下:

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

使用以下方法检索它:

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

29
投票

Swift 3/4/5使用Date(类型别名)而不是NSDate

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

如果as?中的“yourKey”下没有日期,请记住使用条件强制转换运算符UserDefaults以避免崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.