Ho creato una configurazione personalizzata usando l'approccio standard root.plist per l'iphone. Mi chiedo se c'è un modo per determinare quando l'utente cambia quelle impostazioni nella mia app ...come determinare quando le impostazioni cambiano su ios
risposta
È possibile ascoltare per NSUSerDefaultsDidChange-notifiche con questo:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];
Ogni volta che si cambia NSUserDefaults, viene chiamato il numero defaultsChanged
.
Non dimenticare di chiamare [[NSNotificationCenter defaultCenter] removeObserver:self];
quando si desidera interrompere l'ascolto di queste notifiche (è necessario farlo anche quando l'oggetto viene deallocato).
Registrati per ricevere le notifiche NSUserDefaultsDidChangeNotification
. Non è ovvio, ma il iOS Application Programming Guide lo descrive come ad esempio:
preferenze che l'applicazione esposti tramite le Impostazioni applicazione vengono modificate
I collegamenti sono morti .. – Marmoy
Ascolta cambiare nelle impostazioni
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:NSUserDefaultsDidChangeNotification object:nil];
Ricordarsi di rimuovere l'osservatore, una volta che questo controller della vista non è più in memoria.
La sintassi è per Swift 2. Utilizzo Swift si dovrebbe fare qualcosa di simile a iscriversi a cambiamenti per le NSUserDefaults:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "defaultsChanged:", name: NSUserDefaultsDidChangeNotification, object: nil)
Quindi creare il metodo come questo:
func defaultsChanged(notification:NSNotification){
if let defaults = notification.object as? NSUserDefaults {
//get the value for key here
}
}
Sintassi per Swift 3: 'NotificationCenter.default.addObserver (self, selector: #selector (self.defaultsChanged), nome: UserDefaults.didChangeNotification, object: nil) ' –
Un esempio accesso a un'impostazione di tipo Bool specifica dell'app con chiave "instantWeb":
func observeUserDefaults(notification: NSNotification) {
print("Settings changed")
if let defaults = notification.object as? NSUserDefaults {
if defaults.valueForKey("instantWeb") as! Bool==true {
print("Instant Web ON")
}
}
}
In iOS10, prova questo:
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
// Your code here
}
ah ok, ha senso. ora la mia prossima domanda è, come posso determinare quali impostazioni sono state cambiate? – Ben
+1. In genere dovresti aggiungereObserver in '-init' (o' -application: didFinishLaunchingWithOptions: 'per il delegato dell'app) e removeObserver in' -dealloc'. È più facile che tenere traccia di quante volte ci si è registrati (se si aggiungeObserver due volte, viene chiamato due volte ogni volta che viene inviata la notifica, IIRC). –
@ Ben Non esiste un modo reale per determinare quali impostazioni sono state modificate, ma se si cerca qualcosa di specifico, provare a memorizzare la vecchia versione quando viene eseguita la notifica, quindi verificarla la volta successiva. – Emil