本地常用的存储数据方法有以下几种
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