ios - Reset NSUserDefault key everyday in Swift -


i writing app requires reset key stored in nsuserdefaults every day. (at 00:00 hours)

i have achieved method used messy , unreliable one.

is there easy way achieve goal?

here code.

    extension nsdate     {          func month() -> int         {             let calendar = nscalendar.currentcalendar()             let components = calendar.components(.month, fromdate: self)             let month = components.month             return month         }           func date() -> int         {             let calendar = nscalendar.currentcalendar()             let components = calendar.components(.day, fromdate: self)             let date = components.day              return date         }          func hour() -> int         {             //get hour             let calendar = nscalendar.currentcalendar()             let components = calendar.components(.hour, fromdate: self)             let hour = components.hour              //return hour             return hour         }           func minute() -> int         {             //get minute             let calendar = nscalendar.currentcalendar()             let components = calendar.components(.minute, fromdate: self)             let minute = components.minute              //return minute             return minute         }          func toshorttimestring() -> string         {             //get short time string             let formatter = nsdateformatter()             formatter.timestyle = .shortstyle             let timestring = formatter.stringfromdate(self)              //return short time string             return timestring         }     }   class viewcontroller: uiviewcontroller {       var totalcounterme:int! //stored variable     let currentdate = nsdate() //current date     var todaysdate:int! //date variable storing local value         @iboutlet weak var todaytotal: uilabel! //total cigarrete count value      @iboutlet weak var numberc: uitextfield! //text label value      @ibaction func countpressed(sender: anyobject) {         var counter = totalcounterme //add local value counter         if numberc.text != "" {         counter = counter + int(numberc.text!)! //add input value counter         numberc.text = ""         todaytotal.text = "\(counter)" //display value of counter         nsuserdefaults.standarduserdefaults().setinteger(counter, forkey: "storedcounter") //store counter value         totalcounterme = nsuserdefaults.standarduserdefaults().integerforkey("storedcounter") //return stored value         todaysdate = currentdate.date()             if todaysdate > nsuserdefaults.standarduserdefaults().integerforkey("finaldate") {                 nsuserdefaults.standarduserdefaults().setinteger(0, forkey: "storedcounter")              } else if todaysdate < nsuserdefaults.standarduserdefaults().integerforkey("finaldate") {                 if currentdate.month() > nsuserdefaults.standarduserdefaults().integerforkey("finalmonth") {                     nsuserdefaults.standarduserdefaults().setinteger(0, forkey: "storedcounter")                 }             }          nsuserdefaults.standarduserdefaults().setinteger(todaysdate, forkey: "finaldate") //set todays date in value         nsuserdefaults.standarduserdefaults().setinteger(currentdate.month(), forkey: "finalmonth") //set month          }         }        override func viewdidload() {         super.viewdidload()           let month = nsuserdefaults.standarduserdefaults().integerforkey("finalmonth")         let today = nsuserdefaults.standarduserdefaults().integerforkey("finaldate")         if currentdate.date() > today {             nsuserdefaults.standarduserdefaults().setinteger(0, forkey: "storedcounter")         } else if currentdate.date() < today {             if currentdate.month() > month {             nsuserdefaults.standarduserdefaults().setinteger(0, forkey: "storedcounter")             }         }          totalcounterme = nsuserdefaults.standarduserdefaults().integerforkey("storedcounter")          todaytotal.text = "\(totalcounterme)"      } } 

you can create nsuserdefault extension computed property getter , setter save user last access date. nscalendar has method called isdateintoday can use inside setter removepersistentdomainforname if last access date not in same day today:

extension userdefaults {      static let defaults = userdefaults.standard      static var lastaccessdate: date? {         {             return defaults.object(forkey: "lastaccessdate") as? date         }         set {             guard let newvalue = newvalue else { return }             guard let lastaccessdate = lastaccessdate else {                 defaults.set(newvalue, forkey: "lastaccessdate")                 return             }             if !calendar.current.isdateintoday(lastaccessdate) {                 print("remove persistent domain")                 userdefaults.reset()             }             defaults.set(newvalue, forkey: "lastaccessdate")         }     }      static func reset() {         defaults.removepersistentdomain(forname: bundle.main.bundleidentifier ?? "")     } } 

just set user last access date when user opens app:

override func viewdidload() {     super.viewdidload()     userdefaults.lastaccessdate = date() }  

Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -