cocoa - How to register user defaults using NSUserDefaults without overwriting existing values? -


i have appdelegate class +(void)initialize method use register defaults. here's code use:

+ (void)initialize {   nsdictionary *defaults = [nsdictionary dictionarywithobjectsandkeys:@"no", @"fookey", @"yes", @"barkey", nil];    [[nsuserdefaults standarduserdefaults] registerdefaults:defaults]; } 

i created preferences.xib holds couple of checkboxes (nsbutton) display status of preferences. bound nsuserdefaultscontroller same keys (fookey , barkey in case). each time launch app , change "defaults" restored on next app launch.

is there way register "default defaults" without overwriting existing values? maybe each time build , launch app preferences file being recreated? maybe should unbind checkboxes nsuserdefaultscontroller , maintain values of keys myself custom code in preferences window controller?

i'd hear implementation of choice maintaining user defaults.

i'm using mac os x 10.6.2 , xcode 3.2.1

from documentation -registerdefaults: (emphasis added):

the contents of registration domain not written disk; you need call method each time application starts. can place plist file in application's resources directory , call registerdefaults: contents read in file.

so code on right track. how register default defaults.

i use in -applicationdidfinishlaunching::

// load default defaults [[nsuserdefaults standarduserdefaults] registerdefaults:[nsdictionary dictionarywithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"defaults" oftype:@"plist"]]]; 

using plist makes easy add , change defaults in app, , prevents making mistake of using @"no" value too.

edit: swift 3 variant:

 userdefaults.standard.register(defaults: nsdictionary(contentsof: bundle.main.url(forresource: "defaults", withextension: "plist")!)! as! [string : any]) 

Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -