Я пишу приложение, которое требует сброса ключа, хранящегося в NSUserDefaults каждый день. (В 00:00 часов)Сброс ключа NSUserDefault каждый день в Swift
Я достиг этого, но метод, который я использовал, является беспорядочным и ненадежным.
Есть ли простой способ достичь моей цели?
Вот код.
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 for 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 to the counter
if numberC.text != "" {
counter = counter + Int(numberC.text!)! //add input value to 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)"
}
}
Пожалуйста, напишите, что у вас есть, таким образом мы сможем лучше всего решить, как улучшить. – Otra
Это ленивый код. Но в любом случае я подниму это на мгновение. @Otra – Sanidhay
Проблема в том, как вы пытаетесь выполнить свою задачу. Не нужно делать это в полночь. Просто сохраните дату, когда вы сохранили настройки, и в следующий раз, когда пользователь откроет приложение, проверьте, была ли эта дата в тот же день, что и сегодня, в противном случае сбросить ее. –