2014-11-04 12 views
22

मैं स्टॉपवॉच एप्लिकेशन बना रहा हूं और उपयोगकर्ता को आवेदन बंद करने से पहले प्रारंभ तिथि को स्टोर करने की आवश्यकता है और जब उपयोगकर्ता एप्लिकेशन को फिर से खोलता है तो इसे पुनर्प्राप्त करने की आवश्यकता होती है।NSUserDefaults से NSDate ऑब्जेक्ट को पुनर्प्राप्त और असाइन कैसे करें?

तो उदाहरण के लिए यदि उपयोगकर्ता स्टॉपवॉच शुरू करता है और फिर एप्लिकेशन बंद कर देता है और फिर कुछ समय बाद एप्लिकेशन को खोलता है तो ऐप को स्टॉपवॉच चलने पर चलने वाले समय को खोलने और बंद करने के बीच का समय जोड़ना चाहिए।

मैंने अपने व्यू कंट्रोलर में दो फ़ंक्शन बनाए हैं जो इसे संभालते हैं।

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

उत्तर

53

अपनी तिथि वस्तु सेट इस प्रकार है:

UserDefaults.standard.set(Date(), forKey:"yourKey") 
कोड यह

इसका उपयोग करके इसे पुनर्प्राप्त करें:

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

या स्विफ्ट 1.2 'NSUserDefaults.standardUserDefaults()। ऑब्जेक्टफोरकी (" yourKey ") के रूप में! NSDate' –

+3

यदि आपका 'यूके' पहले से ही उपयोगकर्ता को सहेजा नहीं गया है तो यह क्रैश हो जाएगा। 'के रूप में उपयोग करना चाहिए? NSDate' इसके बजाय – Inn0vative1

+0

@ Inn0vative1 सुनिश्चित करें, अगर आप सुनिश्चित नहीं हैं कि कोई मान –

14

स्विफ्ट 3.0Date (प्रकार उर्फ) का उपयोग कर के बजाय NSDate:

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

कृपया as?बचने दुर्घटनाग्रस्त करने के लिए सशर्त डाली ऑपरेटर का उपयोग करने के लिए करता है, तो "yourKey" पहले से ही सहेजा नहीं गया है याद UserDefaults पर।

+1

सहायक है तो कभी भी एक वैकल्पिक बल को अनदेखा न करें। धन्यवाद। – Aaronium112

+0

बहुत अच्छा! धन्यवाद! – Jeremie

संबंधित मुद्दे