[Object C]_[初级]_[NSUserDefaults在项目中的应用]
2015-12-04 14:39
531 查看
NSUserDefaults
每个应用程序附带了一组默认的工厂(数据存储包)。当用户编辑他或她缺省值,用户设置的值和工厂默认值存储在用户的默认数据库。因此,每次应用程序启动时,你需要提醒工厂的缺省值。这个操作称为默认注册。注册后,您将使用用户默认值对象来确定用户想要的应用程序的行为。这个过程称为阅读和使用默认值。数据从数据库用户的默认值将自动读取的文件系统。您还将创建一个首选项面板,将允许用户设置默认值。更改默认值对象将自动写入到文件系统。这个过程被称为设置默认值。下面我们看一张图片来更简明了解NSUserDefaults的应用原理,工作流程图如下:
流程图主要说明在应用程序中用NSUserDefaults设置配置数据,NSUserDefaults把这些数据写到文件系统上,~/Library/Preferences是存取NSUserDefaults的plist文件的目录。也可以读取NSUserDefaults来获取之前设置的配置数据,进行启动程序的时候用于加载某些操作。
场景:程序启动时,保存应用程序上一次关闭之前的操作或者设置的一些选项数据。NSUserDefaults支持的数据类型:NSNumber(包括基本数据类型:NSUInteger,BooL,float,double),NSString,NSURL,NSdate,NSData,NSArray,NSDictionary,但是不支持自定义类型的对象。NSUserDefaults就是一个系统自带的词典库,方便存数据和取数据。
下面看看示例代码
// NSUserDefaults设置数据保存到磁盘的文件位置
// /Users/mac-d1/Library/Preferences/TestNSUserDefaults.plist
#import <Foundation/Foundation.h>
//为应用程序注册工厂默认值
void DoRegisterFactoryDefault()
{
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
//基本数据类型
[defaults setInteger:1 forKey:@"integer"];
[defaults setBool:true forKey:@"bool"];
[defaults setDouble:5.6487 forKey:@"double"];
[defaults setFloat:1.20 forKey:@"float"];
NSURL *url =[NSURL fileURLWithPath:@"/Users/mac-d1/Library/Preferences/TestNSUserDefaults.plist"];
[defaults setURL:url forKey:@"url"];
//数字类型
[defaults setObject:[NSNumber numberWithBool:false] forKey:@"number-bool"];
[defaults setObject:[NSNumber numberWithInteger:2] forKey:@"number-integer"];
[defaults setObject:[NSNumber numberWithInt:3] forKey:@"number-int"];
[defaults setObject:[NSNumber numberWithDouble:6.78485] forKey:@"number-double"];
[defaults setObject:[NSNumber numberWithFloat:2.30] forKey:@"number-float"];
[defaults setObject:@"hello world" forKey:@"string"];
//当前系统的日期
NSDate *date =[NSDate date];
[defaults setObject:date forKey:@"date"];
//词典
NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:@"dic1",@"key1",@"dic2",@"key2",@"dic3",@"key3", nil];
[defaults setObject:dic forKey:@"dic"];
//数组
NSArray *array =[NSArray arrayWithObjects:dic,@"array1",@"array2", nil];
[defaults setObject:array forKey:@"array"];
//NSData
NSData *data =[@"NSData data" dataUsingEncoding:NSUTF8StringEncoding];
[defaults setObject:data forKey:@"data"];
//保存设置的数据到磁盘
[defaults synchronize];
}
//读取数据,改变方法和保存用户的愿望(即用户想要实现的操作和界面反应的现象)
void ReadFactoryDefaultsToChangeOperater()
{
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
//基本类型
NSUInteger integer =[defaults integerForKey:@"integer"];
BOOL boolValue =[defaults boolForKey:@"bool"];
double doubleValue =[defaults doubleForKey:@"double"];
float floatValue =[defaults floatForKey:@"float"];
NSURL *url =[defaults URLForKey:@"url"];
NSDate *date =[defaults objectForKey:@"date"];
NSLog(@"\ninteger:%ld\n boolValue:%d\n doubleValue:%lf\n floatValue:%f\n url:%@\n date:%@",integer,boolValue,doubleValue,floatValue,[url path],date);
//NSNumber
NSNumber *integetNum=[defaults objectForKey:@"number-integer"];
NSNumber *intNum=[defaults objectForKey:@"number-int"];
NSNumber *boolNum=[defaults objectForKey:@"number-bool"];
NSNumber *doubleNum=[defaults objectForKey:@"number-double"];
NSNumber *floatNum=[defaults objectForKey:@"number-float"];
NSLog(@"\n integetNum:%@\n intNum:%@\n boolNum:%@\n doubleNum:%@\n floatNum:%@\n",integetNum,intNum,boolNum,doubleNum,floatNum);
//object
NSString *str =[defaults objectForKey:@"string"];
NSArray *array =[defaults objectForKey:@"array"];
NSDictionary *dic =[defaults objectForKey:@"dic"];
NSData *data =[defaults objectForKey:@"data"];
NSString *dataStr =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"\n str:%@\n array:%@\n dic:%@\n dataStr:%@\n",str,array,dic,dataStr);
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
DoRegisterFactoryDefault();
//ReadFactoryDefaultsToChangeOperater();
}
return 0;
}
执行方法ReadFactoryDefaultsToChangeOperater()后的结果:
我们再来看看plist文件的数据:
相关文章推荐
- [Object C]_[初级]_[NSArray排序]
- [Object C]_[初级]_[两个数组共有元素的提取,删除,数组的合并]
- [Object C]_[初级]_[文件修改创建时间和修改时间]
- [Object C]_[初级]_[创建文件路径时,已存在同名目录和文件名的问题的解决方案]
- Objective-C之启程Objective-C语言介绍
- IOS开发(11)之UITabBarController多视图控制器
- IOS开发(13)之UITextField控件
- IOS开发(12)之UILabel
- IOS开发(14)之UISlider控件
- IOS开发(15)之UITextView控件
- IOS开发(16)之UIButton控件
- IOS开发(17)之UIImageView控件
- 认识NSUserDefaults
- IOS开发辅助小工具
- NSUserDefaults
- IOS中UUID存放在不同的地方
- NSUserDefault
- NSUserDefaults
- NSUserDefault的用法
- 对比iOS中的四种数据存储