2015-12-19 26 views
9

Ich versuche, meinen Code so zu programmieren, dass der Hintergrund schwarz wird und schwarz bleibt, wenn der Benutzer die App schließt. (Das gleiche gilt für den Tag-Modus.)Wie speichere ich eine UIColor mit NSUserDefaults?

Bitte beachten Sie: Ich habe bereits Tasten codiert und wenn sie drücken, wechseln alle Szenen in diesen Modus.

Hier ist mein Code, wo ich die Hintergrundfarbe benötigen werde gehen gespeichert werden: (Ich brauche es in beiden if-Anweisungen)

if GlobalData.dayBool == true && GlobalData.night == false { 
    backgroundColor = GlobalData.dayColor 
} 

if GlobalData.nightBool == true && GlobalData.dayBool == false { 
    backgroundColor = GlobalData.nightColor 
} 

My Night and Day Farben:

struct GlobalData { 
    static var score = 0 
    static var dayColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0) 
    static var nightColor = UIColor(red:0.10, green:0.10, blue:0.10, alpha:1.0) 
    static var dayBool = true 
    static var nightBool = true 
} 

Antwort

12
extension NSUserDefaults { 
    func setColor(value: UIColor?, forKey: String) { 
     guard let value = value else { 
      setObject(nil, forKey: forKey) 
      return 
     } 
     setObject(NSKeyedArchiver.archivedDataWithRootObject(value), forKey: forKey) 
    } 
    func colorForKey(key:String) -> UIColor? { 
     guard let data = dataForKey(key), color = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? UIColor 
     else { return nil } 
     return color 
    } 
} 

Sie auch eine UIColor mit einem Getter Setter erstellen kann es automatisch wie folgt speichern:

var nightColor: UIColor? { 
    get { 
     return NSUserDefaults.standardUserDefaults().colorForKey("nightColor") 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setColor(newValue, forKey: "nightColor") 
    } 
} 

Edit/Update:

Xcode 8.1 • Swift 3.0.1

extension UserDefaults { 
    func set(_ color: UIColor, forKey key: String) { 
     set(NSKeyedArchiver.archivedData(withRootObject: color), forKey: key) 
    } 
    func color(forKey key: String) -> UIColor? { 
     guard let data = data(forKey: key) else { return nil } 
     return NSKeyedUnarchiver.unarchiveObject(with: data) as? UIColor 
    } 
} 

var nightColor: UIColor? { 
    get { 
     return UserDefaults.standard.color(forKey: "nightColor") 
    } 
    set { 
     UserDefaults.standard.set(newValue, forKey: "nightColor") 
    } 
} 
0

Der einfachste Weg wäre NSUserDefaults.

Einfaches Beispiel -

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("Coding Explorer", forKey: "userNameKey") 

In diesem Fall Sie speichern die Zeichenfolge "Coding Explorer" und Sie durch den Schlüssel "userNameKey" verweisen können. Ich bin sicher, können Sie sehen, wie Sie diese in Ihre Lösung arbeiten können: P

Eine gute Quelle Sie here loszulegen

zu helfen Wenn Sie etwas wollen, etwas robuster, werfen Sie einen Blick auf Coredata, die Die Implementierung ist jedoch ein wenig komplizierter. CoreData ist möglicherweise nicht das, was Sie für eine einfache Zustandserhaltung benötigen, aber es lohnt sich, sich trotzdem zu informieren.

Link-here

bearbeiten

Here is a great example to look at how you can save the actual color to NSUserData

+0

Ich habe sah bereits die Websites an. Ich versuche, die Hintergrundfarbe zu speichern, und ich brauche Hilfe dabei. Ich habe nach Hilfe gesucht und es gibt keine Hilfe da draußen. –

+1

@JoshSschlabach Sie können NSKeyedArchiver verwenden, um Ihr UIColor-Objekt in NSUserDefaults zu speichern –