iPhone自定的设置里面,可以对WLAN,Location等权限进行设置,我们也可以增加一个自己的自定义设置。原理就是利用Setting.Bundle和NSUserDefaults的属性,生成一个全局的变量,以供App内部使用。
iPhone的设置里面提供了7中“设置类型”,供开发者自行设置和定义,
Settings.bundle/
Root.plist
en.lproj/
Root.strings
其中的Root.plist文件就是我们要设置的偏好plist文件, 具体编写规则见参考链接1
每一个属性都有一个“Identifier”的值, 通过获取着key获取实际的value
// 获取
NSArray *identifiers = @[@"play_sounds_preference",
@"3D_Sound_preference",
@"user_name",
@"experience_preference",
@"gravity_preference"];
for (NSString *key in identifiers) {
NSLog(@"key = %@, value = %@",key, [[NSUserDefaults standardUserDefaults] objectForKey:key]);
}
// 设置
[[NSUserDefaults standardUserDefaults] setObject:@"DON" forKey:@"user_name"];
[[NSUserDefaults standardUserDefaults] synchronize];
参考Root.plist文件和Root.strings(本地化)实现更多的设置条件。 如果实际中需要针对不同的类型有更多的设置,可以通过China Pane实现。 首先选中一个Row,右击Add Row,将Type设置为PSChildPaneSpecifier,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"subTitle_perference":@"sub title",
@"subEnvironment_preference":@"QA"
}];
[[NSUserDefaults standardUserDefaults] synchronize];
return YES;
}
需要注意的是:
- 在自定义的plist文件中,Identifier应该改为Key(首字母大写), 否则识别有问题
- Title内容,必须设置Default Value, 否则显示不出来
在APP环境测试的时候,我们可能需要在不同的环境中切换,以确保不同的环境中请求返回的结果。因此我们可以在自定义设置中通过切换不同的环境以达到在APP内环境切换的效果。
实践的项目:Bootstrap