8.1 应用程序设置概念
8.2 创建设置束
8.3 设置项目种类
8.4 读取设置
8.1 应用程序设置概念
应用程序设置(Application Settings):在iOS和Mac OS很多软件中都有使用偏好(preferences),例如,在iOS中我们设置WiFi、运用商和壁纸等等。
8.2 创建设置束
创建工程
Settings Bundle(设置束)
一个应用程序的使用偏好,是存储在一个Root.list的XML文件中的,在这个文件中是与Settings Bundle关联起来的。可以在Root.list中指定设置项目的类型,可以有常规字段类型、划块、开关和子视图类型等等。
创建一个设置束
上图中在Resource文件夹下添加设置束文件Settings.bundle(默认名称)。展开Settings.bundle文件夹:
Root.plist图标 是设置属性的属性列表
en.lproj文件夹 是本地化应用程序时使用的
Root.plist的PreferenceSpecifiers节点
8.3 设置项目种类
生成的设置束文件设置项目
从上面的运行的应用程序看,我们没有编写任何一行代码系统就已经帮我们创建好一些设置项目了。
PSGroupSpecifier
设置项目Type为PSGroupSpecifier用于指示该项目是一个新分组的开始,其后的每个项目都将是此分组的一部分,直到一个Type值为PSGroupSpecifier的项目之前。
在本例子中我们还要设置Title为Group,有多个Group时候Title不能重复。
PSTextFieldSpecifier
设置项目Type为PSTextFieldSpecifier是指示该项目是一个特定的使用偏好字段类型。其它项目的说明:
PSToggleSwitchSpecifier
设置项目Type为PSToggleSwitchSpecifier是指示该项目是一个特定的使用偏好开关类型。其它项目的说明:
PSSliderSpecifier
设置项目Type为PSSliderSpecifier是指示该项目是一个特定的使用偏好滑块类型。其它项目的说明
为滑块添加最大最小值图片
Show Package Contents来访问束的内容。这将打开一个新的窗口。将图标文件复制到此文件夹中。这样束就能找到这两个图标文件了。
添加最大最小值图片文件结构
具体往束里设置图片:
运行结果
添加子设置视图
添加完子视图,运行程序:
8.4 读取设置
读取应用程序中设置
我们使用NSUserDefaults类读取用户设置,通常使用
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSUserDefaults获得值方法有:
arrayForKey: boolForKey: dataForKey:
dictionaryForKey: floatForKey: integerForKey:
objectForKey: stringArrayForKey: stringForKey:
MainViewController.h
MainViewController.m
FlipsideViewController.h
FlipsideViewController.m
运行
下面可以处理设置中触发的相关事件
一.如何设置和获取数据
- 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]);
二.Setting设置
1.创建Setting.bundle
创建关联的plist需要注意的是自己在Finder将Setting.bundle右键,显示包内容,然后自己将Sound.plist拖进去
所有主文件都是Root.plist,详细如下:
Sound.plist
ChildPane就是一个外联的资源,只要名字对应就行了,此外尽量勾选Raw Keys/Values选项,因为这样显示出的参数才比较详尽,否则会出现混淆,比如Key就会对应Identifier,这个就比较晕了,其实所有资源在程序里对应的key,就是在item里定义的Key
注意打勾
三.setting修改完毕后通知程序
有2种通知可以触发回调程序
1.NSUserDefaultsDidChangeNotification
绑定事件
- [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifys:) name:NSUserDefaultsDidChangeNotification object:nil];
- - (void)notifys:(NSNotification *)notification {
- NSLog(@"%@",notification);
- }
2.UIApplicationWillEnterForegroundNotification
绑定事件
- [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillEnterForegrounds:) name:UIApplicationWillEnterForegroundNotification object:nil];
- - (void)applicationWillEnterForegrounds:(NSNotification *)notification {
- NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
- //强制保存数据
- [defaults synchronize];
- //数据重新获取,并且重新调整界面
- //⋯⋯
- }
参考文档
Setting Application Schema Reference
Preferences and Setting Programming Guide