[Object C]_[初级]_[NSUserDefaults在项目中的应用]

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文件的数据:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值