zoukankan      html  css  js  c++  java
  • ios开发之---将数据写入和读取与沙盒的具体理解和实现。

    一、将Documents文件夹下文件的写入和读取

     A:文件的存储:

        // 1、获取“沙盒”路径 (文件夹路径)

        // 方法的意思:SearchPath 搜索路径。ForDirectories 哪个文件夹 InDomains 在哪个范围。  合起来就是:搜索在指定范围内的哪个文件夹路径。

        // 三个参数的意思:1、哪个文件夹。2、指定的搜索范围。3、是否展开路径。

        // 返回值是一个数组。

        NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

        // 2、根据文件名,拼接文件路径。

        NSString *filePath = [path stringByAppendingPathComponent:@"fusen.data"];

        

        // 3、将数据写入到指定的文件路径下的文件里面。

        NSArray *arr = @[@"1",@"2"];

        [arr writeToFile:filePath atomically:YES];

    B:文件的读取:以什么方式存,就以什么方式读。

       // 1、获取“沙盒”路径 (文件夹路径)

        NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

        // 2、根据文件名,拼接文件路径。

        NSString *filePath = [path stringByAppendingPathComponent:@"fusen.data"];

        NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];

    二、偏好设置存储:(NSUserDefaults)的存储和读取

    A:存储:

    特点:1、不需要关心文件件。2、NSUserDefaults专门用来做偏好设置存储。3、底层是封装了一个字典。

        NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

        [userDefault setObject:@"fs" forKey:@"name"];

        [userDefault setObject:@"24" forKey:@"age"];

            // 同步,把缓存里的偏好设置文件写入硬盘。ios8之前必须要同步。ios8以后可写,可不写

        [userDefault synchronize];

     B:读取:

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

      NSString *name = [userDefault objectForKey:@"name"];

     NSString *age = [userDefault objectForKey:@"age"];

    通过以上代码就可获取到保存到偏好设置里的信息。

     三、自定义对象归档、解档

    因为自定义对象,不能用plist存储,也不能用偏好设置,所以自定义对象,一般是用归档来存储。比如:用户信息:userInfo.一般是归档。

    1、自定义对象要遵守  <NSCoding>  协议。

    2、在自定义对象的.m文件中,实现协议方法。

    // 自定义对象 归档

    - (void)encodeWithCoder:(NSCoder *)aCoder

    {

        [aCoder encodeObject:self.name forKey:@"name"];

        [aCoder encodeObject:self.pwd forKey:@"pwd"];

    }

     // 自定义对相 解档

    - (id)initWithCoder:(NSCoder *)aDecoder

    {

        if (self = [super init]) {

            self.name = [aDecoder decodeObjectForKey:@"name"];

            self.pwd = [aDecoder decodeObjectForKey:@"pwd"];

        }

        return self;

    }

    3、实现归档

         // 1、获取文件夹路径。

        NSString *tmpDir = NSTemporaryDirectory();

            // 2、拼接文件路径

        NSString *filePath = [tmpDir stringByAppendingPathComponent:@"user.info"];

        // 3、给模型属性赋值。

        Account *account = [[Account alloc] init];

        account.name = @"张三";

        account.pwd = @"123";

        // 4、实现自定义对象归档

        [NSKeyedArchiver archiveRootObject:account toFile:filePath];

    4、实现解档。

     // 1、获取文件夹路径。

        NSString *tmpDir = NSTemporaryDirectory();

        // 2、拼接文件路径

        NSString *filePath = [tmpDir stringByAppendingPathComponent:@"user.info"];

        // 3、解档。

    Account *account = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

     

  • 相关阅读:
    windows下Yarn安装与使用(两种方法)
    git配置公钥---解决码云出现git@gitee.com: Permission denied (publickey)
    npm使用国内镜像的两种方法
    【LeetCode】33. Search in Rotated Sorted Array (4 solutions)
    【LeetCode】83. Remove Duplicates from Sorted List
    【LeetCode】82. Remove Duplicates from Sorted List II
    【LeetCode】85. Maximal Rectangle
    【LeetCode】84. Largest Rectangle in Histogram
    【LeetCode】87. Scramble String
    【LeetCode】162. Find Peak Element (3 solutions)
  • 原文地址:https://www.cnblogs.com/fs-ios/p/4707720.html
Copyright © 2011-2022 走看看