您的位置:首页 > 移动开发 > Objective-C

[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 NSUserDefault