Ho una classe AppDelegate con il metodo +(void)initialize
che uso per registrare alcuni valori predefiniti. Ecco il codice che uso:Come registrare le impostazioni utente predefinite usando NSUserDefaults senza sovrascrivere i valori esistenti?
+ (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. Sono vincolati a NSUserDefaultsController
con le stesse chiavi (fooKey e barKey in questo caso). Ogni volta che lancio un'applicazione e cambio i "valori predefiniti", vengono ripristinati al prossimo avvio dell'app.
C'è un modo per registrare "valori predefiniti" senza sovrascrivere valori già esistenti? Forse ogni volta che costruisco e lancio un'applicazione il suo file delle preferenze viene ricreato? Forse dovrei eliminare le checkbox da NSUserDefaultsController
e mantenere i valori delle chiavi da solo con un codice personalizzato nel controller della finestra delle preferenze?
Mi piacerebbe sentire la vostra implementazione di scelta per il mantenimento delle impostazioni predefinite dell'utente.
Sto utilizzando Mac OS X 10.6.2 e XCode 3.2.1
Assicurarsi che le caselle di controllo sono tenuti a "Shared opzioni predefinite dell'utente Controller", chiave di controllo "valori", modello di percorsi chiave "fooKey"/"Barkey". Altrimenti il tuo codice mi starà bene. – Costique
'@" NO "' non è un valore booleano; è una stringa letterale per la parola "NO". Si dovrebbe usare '[NSNumber numberWithBool: NO]'; in caso contrario, i valori nelle impostazioni predefinite dell'utente non saranno Booleans. –
No, non lo saranno, ma se li leggo come BOOL - lo faranno. Estratto dal libro di Daniel H Steinberg "Cocoa Programming" (pragprog.com): In realtà, non è necessario essere così espliciti quando si inserisce BOOL nel dizionario. È possibile passare il valore YES o NO come stringa e creare ancora un valore BOOL da questo valore quando si leggono le preferenze. – Eimantas