Storing a variable when the app is first installed

2020-03-31 07:03发布

Attempting to store the variable DateInstalled when the app is first installed, but each time the app loads this variable is overridden by the new date.

I am new to Xcode so the answer is probably obvious. I found this code below to store the variable in the user defaults but every time it seems to skip to the else statement.

var DateInstalled: NSDate {
    get {
        if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("DateInstalled") as? NSDate {     
            return returnValue
        } else {
            NSLog("Saving new Date")
            return NSDate()          // Default value
        }
    }
    set {
        NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "DateInstalled")
        NSUserDefaults.standardUserDefaults().synchronize()
    }
}

2条回答
\"骚年 ilove
2楼-- · 2020-03-31 07:10

first make your date optional:

var installedDate: NSDate? {
    get {
        return NSUserDefaults().objectForKey("installedDateKey") as? NSDate
    }
    set {
        NSUserDefaults().setObject(newValue, forKey: "installedDateKey")
    }
}

and inside your viewDidLoad method add a conditional to only save its value if it stills nil:

override func viewDidLoad() {
    super.viewDidLoad()
    if installedDate == nil {
        installedDate = NSDate()
        print("First run")
    } else { 
        print("Not first run")
        print(installedDate!)
    }
}

Xcode 8 • Swift 3

var installedDate: Date? {
    get {
        return UserDefaults.standard.object(forKey: "installedDateKey") as? Date
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "installedDateKey")
    }
}
查看更多
淡お忘
3楼-- · 2020-03-31 07:35

Hey @Curtis Cowan try with this

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

            let firstLaunch = NSUserDefaults.standardUserDefaults().boolForKey("FirstLaunchTime")
            if firstLaunch  {
               println("Not First launch")
            }
            else {
                println("First launch")
                NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey:"FirstLaunchTime")
                 }

            return true
      }
查看更多
登录 后发表回答