zoukankan      html  css  js  c++  java
  • ios NSUserDefaults存储数据(偏好设置)

    ios NSUserDefaults存储数据(偏好设置)

    1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据
    包括:NSString, NSNumber, NSDate, NSArray, NSDictionary
    2.数据存放于一个plist文件中。这个文件位于在 app同级目录的/Library/Preferences目录下

    3.NSUserDefaults主要是 setObject 和 object ForKey,大数据使用其他的存储,如Sqlite3,CoreDate等;

    4.使用偏好设置对数据进行保存之后, 它保存到系统的时间是不确定的,会在将来某一时间点自动将数据保存到Preferences文件夹下面,如果需要即刻将数据存储,可以使用[defaults synchronize];

    1.偏好设置的plist文件存放地址

      NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
       NSLog(@"%@", path);

    2.读存入NSString(NSNumber,NSDate)

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        // 写入数据
        [defaults setObject:@"testString" forKey:@"test1"];
        // 立即写入
        [defaults synchronize];
        
        // 读取数据
        NSString *str = [defaults objectForKey:@"test1"];
        NSLog(@"---%@",str);

    3.读存入NSArray,NSDictionary

    NSArray,NSDictionary为不可变类型,也是类似的。

    但是,如果存入的是NSMutableArray,NSMutableDictionary,读出来的数组是不可变的类型为:NSCFArray。需要进行转变为NSMutableArray.

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSMutableArray *array = [NSMutableArray arrayWithObjects:@"test1", @"test2", @"test3", nil];
        [array addObject:@"test4"];
        // 写入数据
        [defaults setObject:array forKey:@"test2"];
        // 立即写入
        [defaults synchronize];
        
        // 读取数据
        // reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'  这样直接等于的话mutableArray的类型为NSCFArray,不能继续往数组里面添加
    //    NSMutableArray *mutableArray = [defaults objectForKey:@"test2"];
        NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"test2"]];
        [mutableArray addObject:@"test5"];
        NSLog(@"%@",mutableArray);
  • 相关阅读:
    vue中dom元素和组件的获取
    Vue.js中父子组件之间的传值和传方法
    IDEA中的快捷键
    springmvc中使用controller时,跳转视图会带上外层的地址
    通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
    vue中的组件
    vuejs
    成员变量(实例变量)&局部变量&静态变量(类变量)的区别
    代码块
    重载&重写
  • 原文地址:https://www.cnblogs.com/shen5214444887/p/4901471.html
Copyright © 2011-2022 走看看