在尝试访问存储在NSUserDefaults中的值之前,您应该注册默认值。 你可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
。
注册您的默认值很快,所以不需要优化。只需在应用程序启动时执行此操作即可。
我存储我的userdefaults在plist中并注册该列表的内容,就像这样:
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DefaultUserDefaults" ofType:@"plist"]];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
如果您注册默认这样你就不必担心您覆盖用户提供的值。 NSUserdefaults使用“域”来存储它的值。如果您注册了默认值,它们将存储在注册域中。如果用户存储值,则这些值将存储在应用程序域中。
如果您尝试从NSUserdefaults中获取值,它会查看该值是否存在于应用程序域中,如果不存在,则会从注册域获取该值。
编辑:
(如果没有用户提供的值或者更好的,存储在您的NSUserDefaults的价值观,以及那些作为后备),您会访问那些值一样这个:
NSInteger minutesToWait = [[NSUserDefaults standardUserDefaults] integerForKey:@"MinutesToWait";
NSString *urlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultURLStr"];
plist只是NSDictionary的键和值的另一种表示。关键是您用于访问userdefaults的键,并且该值是您的默认值。 非常直截了当。
你如何创建词典并不重要。你也可以在代码中做到这一点。
所以会说的plist是什么样子?只是一组与关联名称关联的键/值对?如果代码位于` - (void)applicationDidFinishLaunching:(UIApplication *)application`中,还是必须位于` - (BOOL)应用程序中:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions` for一些原因? – 2011-01-31 19:34:16