NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; NSNumber *defaultCalibrationOffset = [NSNumber numberWithFloat:2.0]; //程序注册数据 NSDictionary *resourceDict = [NSDictionary dictionaryWithObject:defaultCalibrationOffset forKey:@"BubbleLevelCalibrationOffsetKey"]; [defaults registerDefaults:resourceDict]; //从程序注册的数据中获取数据 NSNumber *s2 = [defaults objectForKey:@"BubbleLevelCalibrationOffsetKey"]; NSLog(@"%@",s2); //从Setting Application中获取数据 BOOL s = [defaults boolForKey:@"play_sounds_preference"]; NSLog(@"%@",[NSNumber numberWithBool:s]);
1.创建Setting.bundle
创建关联的plist需要注意的是自己在Finder将Setting.bundle右键,显示包内容,然后自己将Sound.plist拖进去
所有主文件都是Root.plist,详细如下:
Sound.plist
ChildPane就是一个外联的资源,只要名字对应就行了,此外尽量勾选Raw Keys/Values选项,因为这样显示出的参数才比较详尽,否则会出现混淆,比如Key就会对应Identifier,这个就比较晕了,其实所有资源在程序里对应的key,就是在item里定义的Key
注意打勾
有2种通知可以触发回调程序
1.NSUserDefaultsDidChangeNotification
绑定事件
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifys:) name:NSUserDefaultsDidChangeNotification object:nil];触发方法
- (void)notifys:(NSNotification *)notification { NSLog(@"%@",notification); }该方法只有用户在相对应setting界面修改了数值,才会触发,如果什么都没有修改是不会触发该通知的
2.UIApplicationWillEnterForegroundNotification
绑定事件
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillEnterForegrounds:) name:UIApplicationWillEnterForegroundNotification object:nil];触发方法
- (void)applicationWillEnterForegrounds:(NSNotification *)notification { NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; //强制保存数据 [defaults synchronize]; //数据重新获取,并且重新调整界面 //⋯⋯ }ps:值得一提的是-(void)synchronize方法可以强制将本次NSUserDefaults数据持久化保存,虽然这个操作相对比较消耗时间,但是对于每次用户操作后保存还是能够接受的。