关于iOS如何利用归档,存储数据。

本地常用的存储数据方法有以下几种

1.存入plist文件中(缺点,只能存一些基本数据类型)

2.利用userdefaults(存点基本设置,其实也是一个plist文件,其实跟plist一样)

3.归档(由于前两个都只能存一些基本类型,所以归档就闲的很厉害,因为可以存一些自定义类型)

先定义一个类:并定义属性,以及写入存和取的代理方法。代码如下:

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property(nonatomic,copy)NSString * name ;
@property(nonatomic,assign)NSInteger age;
@property(nonatomic,assign)double height;

@end

Person.m

#import "Person.h"

@implementation Person

//当你讲一个自定义对象保存到文件的时候就需要调用该方法
//在该方法中说明如何存储自定义对象的属性
//也就说明在该方法中说清楚存储自定义对象的哪些属性

- (void)encodeWithCoder:(NSCoder * )aCoder
{
    NSLog(@"调用了encodeWithCoder:方法");
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeDouble:self.height forKey:@"height"];
    
}

//当从文件中读取一个对象的时候就会调用该方法
//在该方法中说明如何读取保存文件中的对象
//也就是说在该方法中说清楚怎么读取文件中的对象

- (id)initWithCoder:(NSCoder* )aDecoder
{
    NSLog(@"调用了initWithCoder:方法");
    
//    注意:在构造方法中需要先初始化父类的方法
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.height = [aDecoder decodeDoubleForKey:@"height"];
}
    return self;
}


@end

ViewController.m

- (IBAction)saveBtnOnclick:(id)sender {
    
//    1.创建对象
    Person * p = [[Person alloc]init];
    p.name =@"文顶顶";
    p.age = 23;
    p.height = 1.7;
    
    
//    2.获取文件文件路径
    NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    
    NSString * path = [docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path = %@",path);
//    3.将自定义的对象保存到文件中
    [NSKeyedArchiver archiveRootObject:p toFile:path];
    
    
    
}

- (IBAction)readBtnOnclick:(id)sender {
//    1.获取文件路径
    NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString * path = [docPath stringByAppendingPathComponent:@"person.yangyang"];
    
    NSLog(@"path = %@",path);
//
////    2.文件中读取对象
    Person * p = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@,%ld,%1f",p.name,(long)p.age,p.height);


}
@end

-----------------------------------学习自文顶顶博客   http://www.cnblogs.com/wendingding/p/3775293.html

原文地址:https://www.cnblogs.com/YaoWang/p/4685355.html