三数据存储:
1.plist 属性列表
1>适用对象:仅仅是Foundation 框架中的自带的一些类,比如NSString NSArray NSDIcionaryNSSetNSNumberNSData
2.适用对象WriteToFile...方法写入文件
3>调用对象...WithContentsOfFile方法就可以从文件中读取对象内容
2.偏好设置
1>本质还是plist属性列表的方式进行存储
2>存取非常简单
*不需要关心文件名
3>只能存储到一个文件中(不能存放大批量数据)
3.NSCoding
1.能将任何遵守NSCoding协议的对象塞进文件中
2.- (void)encodeCoder:(NSCoder *)encoder
*将对象规档的时候调用(将对象写入文件之前会调用)
/在这个方法说清楚:
1.哪些属性需要存储
2.怎样存储这些属性
3.- (id)initWIthCoder:(NSCoder *)decoder
*当从文件中解析对象时调用
//在这个方法中说清楚:
//1.哪些属性需要解析(读取)
//2.怎样解析(读取)这个属性
4.如果父类中也有属性需要归档或者读档,必须董昂用super的encodeCoder和initWithCoder方法
//- (IBAction)xieru:(id)sender {
// //1.获取沙盒根路径
// NSString *home = NSHomeDirectory();
// //2.document路径
// NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
// //3.新建数据
// NSArray *data = @[@"jack",@"10",@"ffdsf"];
// NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
// [data writeToFile:filepath atomically:YES];
//
//}
//- (IBAction)duchu:(id)sender {
// //1.获取沙盒根路径
// NSString *home = NSHomeDirectory();
// //2.document路径
// NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
// //3.文件路径
// NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
// //4.读取数据
// NSArray *data = [NSArray arrayWithContentsOfFile:filepath];
// NSLog(@"%@",data);
//
//
//}
//
- (void)save{
//1.利用NSUserdefaults ,就能直接访问软件的偏好设置
//不关心文件夹和文件名
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"mj" forKey:@"accout"];
[defaults setObject:@"123" forKey:@"pwd"];
[defaults setInteger:10 forKey:@"age"];
[defaults setBool:YES forKey:@"auto_login"];
//立即同步
[defaults synchronize];
}
- (void)read{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *accout = [defaults objectForKey:@"pwd"];
}
#import "Person.h"
@implementation Person
//对象归档的时候回调用(将对象写入文件之前会调用)
//在这个方法说清楚:
//1.哪些属性需要存储
//2.怎样存储这些属性
- (void)encodeWithCoder:(NSCoder *)encoder{
//将_name 属性值进行编码 (会将_name的值存入文件)
[encoder encodeObject:_namge forKey:@"name"];
[encoder encodeInt32:_age forKey:@"age"];
}
//解码
- (id)initWithCoder:(NSCoder *)decoder{
if (self = [super init]) {
_namge = [decoder decodeObjectForKey:@"name"];
_age = [decoder decodeInt32ForKey:@"age"];
}
return self;
}
@end
- (IBAction)dianji:(id)sender {
Person *p = [[Person alloc] init];
p.namge = @"chihaitao";
p.age = 12;
p.gender = YES;
NSString *path = @"/User/apple/Desktop/person.data";
//1.编码encodeWithCoder2.归档
[NSKeyedArchiver archiveRootObject:p
toFile:path];
}
- (IBAction)duchulai:(id)sender {
NSString *path = @"/User/apple/Desktop/person.data";
//1.initWithCoder解码 2.反归档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}