2016-09-03 5 views
1

Dies ist eine tvOS-Anwendung. Ich möchte, dass sich der Hintergrund meiner Anwendung basierend auf einem Wechselschalter in Einstellungen mit NSUserDefaults ändert. Der Kippschalter heißt "Weißer Hintergrund", der Bezeichner ist "whiteBackground" und der Standardwert ist "NO".NSUserDefaults Kippschalter klebt nicht nach Multitasking

Mit meinem aktuellen Code funktioniert es, wenn der Benutzer nach Hause klickt, navigiert zu "Einstellungen" und tippt auf den Schalter. Wenn der Benutzer jedoch auf die Home-Schaltfläche doppelklickt (Hintergrund der App), über den Task-Switcher zu "Einstellungen" navigiert und dann über den Task-Switcher zurück zur App navigiert, wird die Einstellung zurückgesetzt.

Hier ist mein Code:

class ViewController: UIViewController { 

func registerDefaultSettings() { 
    var appDefaults = ["whiteBackground": false] 
    NSUserDefaults.standardUserDefaults().registerDefaults(appDefaults) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    registerDefaultSettings() 
    uiSettings() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.uiSettings), name: UIApplicationWillEnterForegroundNotification, object: nil) 
} 

func uiSettings() { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    if defaults.boolForKey("whiteBackground") { 
     view.backgroundColor = UIColor.whiteColor() 
    } else { 
     view.backgroundColor = UIColor.blackColor() 
    } 
} 
+0

Wenn ich mich nicht irre, einfach ist das 'setBool (true, ...)' und 'setBool (falsch, ...) 'sollte andersherum sein. –

+1

Ihre Methode zum Registrieren von Standardwerten ist Unsinn. Registrieren 'let appDefaults = [" whiteBackground ": false]' nichts anderes, kein Lesen und ** nie ** 'valueForKey:' – vadian

+0

@MartinR Ich glaube, wie ich es habe, ist korrekt, wie ich den Schalter aktiviert werden soll Der Hintergrund ist weiß. Wirklich, ich denke nicht, dass diese sogar notwendig sind, ich habe sie einfach eingeschlossen, um alles zu versuchen. –

Antwort

0

Nicht sicher, ob es ein Update, da dieses

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     uiSettings() 
} 
+0

Leider nicht so einfach, aber ich schätze die Antwort. –

+0

Ich fange an zu denken, dass es einfach die Natur von NSUserDefaults ist. Die Einstellungen werden wahrscheinlich nicht in den Speicher geschrieben, wenn zwischen dem Umschalten und dem Wechseln der Task zu meiner Anwendung gewechselt wird. –