// ========================WriteToFile方法=========================
// 写入数据
//1.获取文件的存储路径
//用这种方法获取路径 即便以后官方将Document文件夹的名称改变了 还是可以通过此方法获取原Document文件夹的路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//2. 拼接文件的路径
//拼接一个data.plist文件 用来存储数据
NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];
//2. 需要存储的数据
NSArray *namesArray = @[@"亚洲国际舞王尼古拉斯赵四",@"隔壁老王",@"小明"];
//3. 存 writeToFile 根据路径 存数据
[namesArray writeToFile:filePath atomically:YES];
//-----------------------读取数据--------------------
// 1. 获取路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];
//2. 根据路径获取数据
NSArray *namesArray = [NSArray arrayWithContentsOfFile:filePath];
//========================NSUserDefaults方法==================
//------------------------------写入数据----------------------------
//1.获取对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//2.存数据
[defaults setObject:@"小明" forKey:@"name"];
[defaults setInteger:100 forKey:@"age"];
[defaults setBool:YES forKey:@"isTrue"];
//3. 非常重要: 立即同步(如果不同步会丢失数据)
[defaults synchronize];
//------------------------------读取数据----------------------------
//1.获取偏好设置的对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//2.获取数据
NSString *name = [defaults objectForKey:@"name"];
NSInteger age = [defaults integerForKey:@"age"];
BOOL isTrue = [defaults boolForKey:@"isTrue"];
//========================归档方法==================
//归档方法存储数据是用来存储对象的
// ----------------------归档方法存储数据数据-------------------
//1.获取路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];
//2. 创建需要存储的对象
CZPerson *p = [[CZPerson alloc]init];
p.name = @"张三";
p.age = 101;
p.isTrue = NO;
//3. 通过归档的方式 存对象(archiveRootObject)
// 如果用归档存储对象 必须遵守NSCoding
//存数据时 必须实现 encodeWithCoder 方法
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
// ~~~~~~~~~~~~~~~~~~~~~encodeWithCoder方法~~~~~~~~~~~~~~
// 此方法是告诉 系统 我想存储 对象的 哪些属性
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
[aCoder encodeBool:self.isTrue forKey:@"isTrue"];
}
// ----------------------归档方法读取数据-------------------
//1. 获取 反归档的路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];
//2.接收数据
// 必须实现 initWithCoder方法 initWithCoder也是NSCoding的方法
CZPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
// ~~~~~~~~~~~~~~~~~~~~~~~~encodeWithCoder方法~~~~~~~~~~~~~~~~~
//此方法 是告诉系统 你取对象的时候 取对象的哪些属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
self.isTrue = [aDecoder decodeBoolForKey:@"isTrue"];
}
return self;
}