一、存储普通数据
1、获取沙盒存储路径
//1.1获取沙盒存储路径
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//1.2获取存储文件路径
NSString *plistPath = [doc stringByAppendingPathComponent:@"data.plist"];
2、存储数据
NSArray *data = @[@"abc",@23];
[NSKeyedArchiver archiverRootObject:data toFile:self.plstPath];
二、对象保存(class)
如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复, 但不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以。
NSCoding协议方法
- encodeWithCoder:
每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量 initWithCoder:
每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量实例:
1、归档对象Person.m设置
@implementation Person
//存储数据需要实现的方法
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeInt:self.age forKey:@"age"];
}
//读取数据需要实现的方法
- (id)initWithCoder:(NSCoder *)decoder {
if(self = [super init]){
self.name = [decoder decodeObjectForKey:@"name"];
self.age = [decoder decodeIntForKey:@"age"];
return self;
}
}
- (void)dealloc {
[super dealloc];
[_name release];
}
@end
2、存储对象Person
Person *person = [[Person alloc] init];
person.name = @"张三";
person.age = 27
[NSKeyedArchiver archiverRootObject:person toFile:self.plstPath];
3、读取数据
Person *person = [NSKeyedUnarchiver unarchiverObjectWithFile:self.plistPath];
NSLog(@"name:%@,age:%@",person.name,person.age);