2016-04-13 12 views
1

Ich verwende NSUserDefaults, um Schlüssel/Wert-Paare in meiner Anwendung zu speichern. Unten ist der Beispielcode:NSUserDefaults unzuverlässig?

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    let ud = NSUserDefaults.standardUserDefaults() 
    if !(ud.boolForKey("launched_before")) { 
     print("first_launch") 
     ud.setBool(true, forKey: "launched_before") 
    } else { 
     print("not_first_launch") 
    } 
} 

Das erste Mal, dass ich die Anwendung starten, druckt es „first_launch“ wie erwartet, und das zweite Mal, dass ich die Anwendung zu starten, gibt es „not_first_launch“ auch wie erwartet. Wenn ich jedoch die Anwendung erneut starte, indem ich die Schaltfläche Stopp und Ausführen im Xcode nach ein paar Mal (vielleicht 4 bis 20 Mal) drücke, gibt boolForKey("launched_before") false zurück, was falsch ist.
Ich teste auf meinem Gerät (iPhone 6, iOS 9.3.1) und Xcode 7.3.
Kann mir jemand helfen?

Antwort

3

NSUserDefaults speichert unzuverlässig, noch schlimmer, dass Sie es gerade beenden, indem Sie Xcode stoppen/ausführen.

Mit dem Aufruf NSUserDefaults.StandardUserDefaults().synchronize werden die Daten gespeichert.

+0

das könnte helfen! –

+0

Aber wie kommt es das zweite Mal, es funktioniert wie erwartet, was bedeutet, Boolean Setting ist erfolgreich, oder? – TangZijian

+0

das wird Ihnen helfen, den NSUserDefault zu verstehen, wie es funktioniert: http://www.accella.net/knowledgebase/nsuserdefaults-some-pretty-good-practices/ –