2015-12-19 18 views
9

Sto provando a programmare il mio codice in modo che se l'utente preme il pulsante Notte lo sfondo diventa nero e rimane nero se l'utente chiude l'app. (Lo stesso vale per la modalità giorno.)Come posso salvare un UIColor con NSUserDefaults?

Nota: ho già codificato i pulsanti e quando lo premono, tutte le scene cambiano in quella modalità.

Ecco il mio codice dove sto andando andando ad avere bisogno il colore di sfondo da salvare: (ne ho bisogno, sia se le dichiarazioni)

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

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

miei Night and Day Colori:

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 
} 

risposta

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

È anche possibile creare un UIColor con un setter getter per salvare automaticamente come segue:

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

modifica/aggiornamento:

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

Il modo più semplice sarebbe utilizzare NSUserDefaults.

esempio semplice -

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

In questo caso sono la memorizzazione la stringa "Coding Explorer" ed è possibile fare riferimento con il tasto "userNameKey". Sono sicuro che si può vedere come si può lavorare questo nella vostra soluzione: P

Una buona fonte per aiutarvi a iniziare here

Se volete qualcosa di un po 'più robusto, dare un'occhiata al CoreData, il l'implementazione è un po 'più complicata comunque. CoreData potrebbe non essere quello che ti serve per la persistenza dello stato semplice, ma potrebbe valere la pena di esaminarlo comunque.

link here

Modifica

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

+0

ho già guardato quei siti. Sto cercando di salvare il colore di sfondo e ho bisogno di aiuto per farlo. Ho cercato aiuto e non c'è aiuto là fuori. –

+1

@JoshSchlabach È possibile utilizzare NSKeyedArchiver per salvare l'oggetto UIColor su NSUserDefaults –

Problemi correlati