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];

 

原文地址:https://www.cnblogs.com/fs-ios/p/4707720.html