2016-04-13 5 views
0

Ich habe eine Variable, die den Wert von NSUserDefaults.standardUserDefaults werden()Anruffunktion, wenn, wenn der Wert in NSUserDefaults.standardUserDefaults() ändert

var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int 

Und ich habe eine Funktion mit dem Namen setGiftCount() ...

Ich muss diese Funktion aufrufen, wenn Variable GiftCount geändert hat ... Wie geht das?

+2

Jus t Beobachter hinzufügen für NSUserDefaultsDidChangeNotification –

+0

Btw hat NSUserDefaults eine Methode namens integerForKey –

+0

Bitte sagen Sie mir ho Beobachter hinzufügen für NSUserDefaultsDidChangeNotification – Dmitry

Antwort

10

Erste

NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "Gift", options: NSKeyValueObservingOptions.New, context: nil) 

Zweite

deinit { 
NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "Gift") 
} 

Dritte

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     setGiftCount() 
    } 

P. S. Danke für die Stimmen!

1

Option 1

Werfen Sie einen Blick auf "didSet". Es wird sofort aufgerufen, nachdem ein neuer Wert gespeichert wurde. Dies wird aufgerufen, wenn Sie die Variable direkt ändern. Um festzustellen, sehen eine Änderung der NSUserDefaults bei Option 2.

var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int { 
    didSet { 
     setGiftCount() 
    } 
} 

--oder Setup ein Observer--

Option 2

In viewDidLoad() fügen Sie den Beobachter:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.giftChanged(_:)), name: "Gift", object: nil) 

erklären Dann

func giftChanged(notification: NSNotification) { 
     if let defaults = notification.object as? NSUserDefaults { 
      //Your code here 
      setGiftCount() 
     } 
    } 
+0

diese Lösung funktioniert nicht! = ( – Dmitry

+0

) Ändern Sie die Variable direkt oder ändern Sie einfach den Wert für den Schlüssel "Gift" in den Benutzervorgaben? – BergerBytes

+0

Ich ändere den Wert für Schlüssel "Geschenk" in Benutzervorgaben – Dmitry

5

Sie einen Beobachter für NSUserDefaultsDidChangeNotification zu Ihrer View-Controller hinzufügen:

Zusatz:

NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil) 

entfernen es:

NotificationCenter.default.removeObserver(self, name: UserDefaults.didChangeNotification, object: nil) 

und fügen Sie die Auswahlmethode:

func userDefaultsDidChange(_ notification: Notification) { 
    // your code... setGiftCount() 
} 
Verwandte Themen