Come registrare predefinite dall'utente utilizzando NSUserDefaults senza sovrascrivere i valori esistenti?

StackOverflow https://stackoverflow.com/questions/2076816

Domanda

Ho una classe AppDelegate con metodo +(void)initialize che uso per registrare alcuni valori di default. Ecco il codice che uso:

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

Ho anche creato Preferences.xib che detiene paio di caselle di controllo (NSButton) che stato di visualizzazione delle preferenze. Essi sono destinati a NSUserDefaultsController con chiavi uguali (fooKey e Barkey in questo caso). Ogni volta che lancio un app e cambiare il "default" sono ripristinate al prossimo lancio app.

C'è un modo per registrare "default default" senza sovrascrivere i valori già esistenti? Forse ogni volta che costruire e lanciare un file app sue preferenze viene ricreata? Forse dovrei separare caselle da NSUserDefaultsController e mantenere i valori delle chiavi di me stesso con un po 'di codice personalizzato controller finestra delle preferenze?

Mi piacerebbe sentire la vostra implementazione di scelta per il mantenimento di impostazioni predefinite dell'utente.

Sto utilizzando Mac OS X 10.6.2 e XCode 3.2.1

È stato utile?

Soluzione

Dalla documentazione per -registerDefaults: (il corsivo è mio):

  

Il contenuto del dominio registrazione non vengono scritti su disco; è necessario chiamare questo metodo ogni volta che i tuoi avvia l'applicazione . È possibile inserire un file plist nella directory delle risorse dell'applicazione e chiamare registerDefaults:. Con i contenuti che hai letto in da quel file

Quindi, il codice era sulla strada giusta. Questo è il modo di registrare le impostazioni predefinite di default.

Io di solito uso questo -applicationDidFinishLaunching::

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

Utilizzando un plist rende facile aggiungere e modificare le impostazioni predefinite nella vostra app, e ti impedisce di fare l'errore di usare @"NO" come valore troppo.

Modifica: Swift 3 Variante:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top