iOS学习爬坑记录20:setting bundle中的DefaultValue与registerDefaults方法注册值不一致
2015-05-18 19:55
405 查看
最近在看setting bundle,发现一个问题,
standardUserDefaults]取出的值不一致)。
在这种情况下,最好是慎用registerDefaults方法,如果你像我一样在程序中写入的default value与Root.plist文件中设置的DefaultValue不一致的话,容易造成用户误判(虽然只有程序第一次安装运行时),使Root.plist文件中DefaultValue生效的代码如下:(相对于参考文章中,添加了检测DefaultValue是否存在,因为我的Root.plist文件并不是每个键都有DefaultValue)
参考文章:http://www.cnblogs.com/elfsundae/archive/2010/12/29/1920869.html
NSDictionary *defaults = @{kWarpDriveKey : @NO, kWarpFactorKey : @5, kOfficerKey : @"tianma", kAuthorizationCodeKey : @"mima"}; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];上述代码写在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中,在viewDidLoad中打印可以看出[NSUserDefaults standardUserDefaults]中的键值更新了,但是进到系统setting设置APP相关界面,仍然保持了Root.plist文件中的默认值(与[NSUserDefaults
standardUserDefaults]取出的值不一致)。
在这种情况下,最好是慎用registerDefaults方法,如果你像我一样在程序中写入的default value与Root.plist文件中设置的DefaultValue不一致的话,容易造成用户误判(虽然只有程序第一次安装运行时),使Root.plist文件中DefaultValue生效的代码如下:(相对于参考文章中,添加了检测DefaultValue是否存在,因为我的Root.plist文件并不是每个键都有DefaultValue)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:kOfficerKey]; if(!name) { // 加载默认配置 NSLog(@"!name)"); [self performSelector:@selector(registerDefaultsFromSettingsBundle)]; } 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) { if ([prefSpecification objectForKey:@"DefaultValue"]) { [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; } } } [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; }
参考文章:http://www.cnblogs.com/elfsundae/archive/2010/12/29/1920869.html
相关文章推荐
- iOS学习爬坑记录17:iOS8从app跳转到设置setting bundle的方法(UIApplicationOpenSettingsURLString)
- iOS学习爬坑记录19:为settings bundle添加版本号version
- iOS学习爬坑记录10:在Storyboard中打开preview的方法
- iOS学习爬坑记录2:往NSMutableArray添加NSDictionary元素失败
- iOS学习爬坑记录3:plist文件的读写,以及向NSMutableArray中写入NSDictionary元素失败
- iOS学习爬坑记录4:ios8中的搜索栏,使用UISearchController
- iOS学习爬坑记录6: 为Xcode 6.1添加Empty Application project template
- iOS学习爬坑记录7:获取设备拥有的font family和font
- iOS学习爬坑记录8:关于自定义Cell的一点认识
- iOS学习爬坑记录9:Xcode6.1 添加Framework
- iOS学习爬坑记录11:学习AsyncSocket时用python写的服务器server端简单代码
- iOS学习爬坑记录12:学习Core data简单的CURD
- iOS学习爬坑记录13:查看内存使用情况的obj-c和Swift代码
- iOS_两种方法删除NSUserDefaults所有记录
- iOS学习爬坑记录14:自定义远程推送通知铃声(Custom Alert Sounds)
- iOS学习爬坑记录15:Error: UIView's window is not equal to another view's window
- iOS学习爬坑记录1:为什么Xcode6中Storyboard变成了正方形?
- iOS学习爬坑记录18:ios获得设备cpu类型
- iOS学习爬坑记录21:'-[UITableViewController loadView] loaded the "XXX" nib but didn't get a UITableView.'
- Settings.bundle的DefaultValue不起作用?(NSUserDefaults)