zoukankan      html  css  js  c++  java
  • 数据存储

    一、NSCoding :  使用NSCoding需要遵守<NSCoding>

    保存:

    /**

     *  将某个对象写入文件时会调用

     *  在这个方法中说清楚哪些属性需要存储

     */

    MJStudent.m

    - (void)encodeWithCoder:(NSCoder *)encoder

    {

        [encoder encodeObject:self.no forKey:@"no"];

        [encoder encodeInt:self.age forKey:@"age"];

        [encoder encodeDouble:self.height forKey:@"height"];

    }

     

    存储:

     // 1.新的模型对象

        MJStudent *stu = [[MJStudent alloc] init];

        stu.no = @"42343254";

        stu.age = 20;

        stu.height = 1.55;

        

        // 2.归档模型对象

        // 2.1.获得Documents的全路径

        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        // 2.2.获得文件的全路径

        NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

        // 2.3.将对象归档

     

        [NSKeyedArchiver archiveRootObject:stu toFile:path];

     

     

     

    /**

     *  从文件中解析对象时会调用

     *  在这个方法中说清楚哪些属性需要存储

     */

    - (id)initWithCoder:(NSCoder *)decoder

    {

        if (self = [super init]) {

            // 读取文件的内容

            self.no = [decoder decodeObjectForKey:@"no"];

            self.age = [decoder decodeIntForKey:@"age"];

            self.height = [decoder decodeDoubleForKey:@"height"];

        }

        return self;

     

    }

     

     

    读取:

     

    // 1.获得Documents的全路径

        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        // 2.获得文件的全路径

        NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

        

        // 3.从文件中读取MJStudent对象

        MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

        

     

        NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);

     

    二、

    偏好设置:(保存与读取)

    保存:

    // 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        

        // 2.存储数据

        [defaults setObject:@"mj" forKey:@"account"];

        [defaults setObject:@"123" forKey:@"pwd"];

        [defaults setInteger:10 forKey:@"age"];

        [defaults setBool:YES forKey:@"auto_login"];

        

        // 3.立刻同步

        [defaults synchronize];

     

     

    读取:

     

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        

        NSString *account = [defaults objectForKey:@"account"];

        BOOL autoLogin = [defaults boolForKey:@"auto_login"];

     

        NSLog(@"%@ -- %d", account, autoLogin);

     

    三、

    Plist存储:(保存与读取)

    保存:

    // 不同的设备根路径可能不一样,设备和虚拟机的路径也不一样,所以最好使用NSHomeDirectory(),系统会自动返回一个根路径

    // 1.获得沙盒根路径

        NSString *home = NSHomeDirectory();

     

    // 拼接路劲,根路径有Documents这个文件夹,所以拼接这个文件夹路劲

    // 2.拼接document路径

     

        NSString *docPath = [home stringByAppendingPathComponent:@"Documents”];

     

     

    // 4.新建数据

    NSArray *data = @[@"jack", @10, @"ffdsf”];

    // 5.文件路径

    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist”];

    // 将文件写入对应的文件路径保存

    [data writeToFile:filepath atomically:YES];

     

     

    读取:

    // 1.获得沙盒根路径

        NSString *home = NSHomeDirectory();

        

        // 2.document路径

        NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];

        

        // 3.文件路径

        NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];

        

        // 4.读取数据

        NSArray *data = [NSArray arrayWithContentsOfFile:filepath];

     

        NSLog(@"%@", data);

  • 相关阅读:
    Angular随笔第一课
    web前端面试集锦(自己搜集的,如有错误请不吝赐教)
    菜单选项卡-2中方法加载选项卡的内容
    dialog使用方法(同一页面,调用一个js代码,实现多个不同样式的弹窗)
    JAVA中对象赋值以及前拷贝,深拷贝等~~
    基类指针指向派生类对象
    JAVA中方法的参数传递(转)
    java和C++的const 和 final 的区别
    JAVA--虚函数,抽象函数,抽象类,接口
    libdash编译中遇到的问题及解决方案
  • 原文地址:https://www.cnblogs.com/pocket-mood/p/4458796.html
Copyright © 2011-2022 走看看