Settings.bundle的DefaultValue不起作用?(NSUserDefaults)

本文介绍了解决在iPhone应用中使用UserDefaults时遇到的默认值不生效的问题。通过在程序启动时检测设置项值,若为nil则加载默认配置,确保应用设置正确初始化。

第一次需要用iPhone系统配置,发现Settings.bundle/Rool.plist中的DefaultValue不起作用。返回是nil。Google了下,NSUserDefaults确实没有提供现成的方法去让DefaultValue生效。解决办法如下:

在程序的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}中检测设置的项值,如果为nil就全部设为DefaultValue的值:

 


  
// [YourApp]AppDelegate.m
- (BOOL)application:(UIApplication * )application
didFinishLaunchingWithOptions:(NSDictionary
* )launchOptions {

NSString
* name = [[NSUserDefaults standardUserDefaults]
stringForKey:
@" name_preference " ];
if ( ! name) {
// 加载默认配置
[self performSelector:@selector(registerDefaultsFromSettingsBundle)];
}

[window addSubview:viewController.view];
[window makeKeyAndVisible];

return YES;
}
// 获取默认设置
- ( void )registerDefaultsFromSettingsBundle {
NSString
* settingsBundle = [[NSBundle mainBundle] pathForResource: @" Settings " ofType: @" bundle " ];
if ( ! settingsBundle) {
NSLog(
@" Could not find Settings.bundle " );
return ;
}

NSDictionary
* settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent: @" Root.plist " ]];
NSArray
* preferences = [settings objectForKey: @" PreferenceSpecifiers " ];

NSMutableDictionary
* defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for (NSDictionary * prefSpecification in preferences) {
NSString
* key = [prefSpecification objectForKey: @" Key " ];
if (key) {
[defaultsToRegister setObject:[prefSpecification objectForKey:
@" DefaultValue " ] forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
[defaultsToRegister release];
}

 

 

Download DefaultSettingsDemo

 

Ref:http://stackoverflow.com/questions/510216/can-you-make-the-settings-in-settings-bundle-default-even-if-you-dont-open-the-s

转载于:https://www.cnblogs.com/elfsundae/archive/2010/12/29/1920869.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值