用户首选项是用来保存和记录用户在操作应用的过程做做出的一些选择或设置。类似Android开发中的SharedPreference,可以存储一些数据,但基本都是简单类型的数据,主要作用都是存储一些用户设置数据,比如是否是首次登陆,就可以设置一个布尔类型的变量,设值为true或false。
NSUserDefaults的几个重要方法:
standardUserDefaults:创建共享默认设置对象的类方法(Java中的静态方法,单例)
objectForKey:返回键对象的实例方法
setObject: forKey:以指定的键设置值的实例方法
基本用法:
新建一个工程,然后在ViewController.m中添加如下代码
- (void)viewDidLoad
{
[superviewDidLoad];
NSUserDefaults *myDefaults = [NSUserDefaultsstandardUserDefaults];
[myDefaultssetObject:@"Hello"forKey:@"defaultKey"];
NSLog(@"The value is %@",[myDefaultsobjectForKey:@"defaultKey"]);
}
编译运行结果如下:
NSUserDefaultsTest[3007:f803] The value is Hello
这样我们实现了NSUserDefaults的基本使用,NSUserDefaults有一个基本特点就是,数据是保存在程序全局中的,所以当退出程序后下次再进来时,数据还是存在的,这样就起到了保存用户操作数据的功能。
上面是实现了个人首选项的使用,下面我们再来看看系统设置的使用。
首先来熟悉一下bundle
bundle的意思是应用程序束的意思,在IOS开发中,存在三种类型的bundle,分别是框架bundle、应用程序bundle和设置bundle。另外还有一种解释就是Xcode让您能够将多个文件组合成有机的整体,这就叫bundle。实际上,bundle就是一个目录,或者叫包。bundle的有点在于它能不露痕迹的存储文件的多个版本,并在特定的条件下使用正确的版本。我们平常接触比较多的就是应用程序bundle,当编译运行程序在iphone或ipad上时,就创建了应用程序bundle。
首先新建一个文件,新建时选择Resources,然后选择settings.bundle,这样就建立了一个设置首选项的默认形式,运行后到模拟器的设置中可以看到如下界面:
打开Settings.bundle文件
![](https://img-my.csdn.net/uploads/201207/20/1342787196_7752.png)
可以看到有个Root.plist文件,里面存储的内容都是以键值对的形式存储的。这里的Item就对应了设置界面中显示的一些选项,Item0的类型是Group,对应的是一个分组表格类型,然后下面的Item都在这个分组表格中,直到遇到下一个Group。Text Field是输入文本框,下面的identifier是key,在代码中可以通过NSUserDefaults的objectForKey:来访问这个key对应的value。显示类型可供选择的还有开关、滑动条、子设置项等。使用中可以具体查看。
这是我做的另一个Demo,里面包含了更多可显示的类型
然后回到ViewController.m文件中,在viewDidLoad中添加如下代码:
//程序设置首选项
self.nameLabel.text = [[NSUserDefaultsstandardUserDefaults] stringForKey:@"name_preference"];
BOOL isSwitch = [[NSUserDefaultsstandardUserDefaults] boolForKey:@"enabled_preference"];
//输出BOOL值的方式
self.switchLabel.text = [NSStringstringWithFormat:@"%@",isSwitch ?@"YES":@"NO"];
float sliderValue = [[NSUserDefaultsstandardUserDefaults] floatForKey:@"slider_preference"];
self.sliderLabel.text = [NSStringstringWithFormat:@"%f",sliderValue];
这样就把设置中的信息读出来显示到界面上了:
以上就是两种用户首选项的使用方法,一种是自定义首选项,一种是使用系统设置的方式。两种都很方便,在项目中用到的地方也比较多。
以上还有不足的地方,希望大家补充,希望和我交流的同学可以关注我的新浪微博:唐韧_Ryan