2014-11-04 11 views
22

Kronometre uygulaması yapıyorum ve kullanıcı uygulamayı kapatmadan önce başlangıç ​​tarihini kaydetmem gerekiyor ve kullanıcı uygulamayı tekrar açtığında geri almam gerekiyor. Örneğin, kullanıcı kronometreyi başlatır ve ardından uygulamayı kapatırsa ve sonra bir süre sonra uygulamayı tekrar açarsa, uygulama kronometre çalışıyorsa açılış ve kapanış arasındaki süreyi tekrar eklemelidir.NSUserDefaults'tan bir NSDate nesnesi nasıl alınır ve atar?

Görüntü denetleyicimde bunu işleyen iki işlev oluşturdum. Ben StackOverflow'daki burada mesajların bir çift ile gitti

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") 
    } 

:

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

iOS - Not able to store NSDate into NSUserDefaults

cevap

53

Set tarih nesnesi aşağıdaki gibi:

UserDefaults.standard.set(Date(), forKey:"yourKey") 
İşte kod

Kullanarak geri al:

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

NSDate' –

+3

Bu, "Anahtarınız" kullanıcıAyarlarına zaten kaydedilmemişse kilitlenecektir. Olarak kullanmalı mıyım? NSDate' yerine – Inn0vative1

+0

@ Inn0vative1, –

14

Swift Date (tip takma ad) kullanarak 3.0 yerine NSDate: "yourKey" zaten kayıtlı değilse

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

as? çökmesini kaçınmak için koşullu döküm operatörü kullanmayı unutmayın UserDefaults. Ya da 1.2.2 NSUserDefaults.standardUserDefaults(). ObjectForKey ("yourKey") olarak ya da

+1

Faydalı bir değer olduğundan emin değilseniz, isteğe bağlı olarak hiçbir zaman güç-unwrap istemiyorum. Teşekkür ederim. – Aaronium112

+0

Çok güzel! Teşekkürler! – Jeremie