1. plist 文件的存储/读取方法
// 文件路径
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"data.plist"];
// 设置数据
NSArray *data = @[@"jack", @10, @"abcd"];
// 储存plist
[data writeToFile:path atomically:YES];
// 读取
NSArray *data2 = [NSArray arrayWithContentsOfFile: path];
2. 偏好设置 NSUserDefaults
/* 偏好设置——数据存储 类中有相应属性 */
- (void)save {
// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 2.存储数据
[defaults setObject:@"qr" forKey:@"name"];
[defaults setObject:@"123" forKey:@"pwd"];
[defaults setInteger:10 forKey:@"age"];
[defaults setBool:YES forKey:@"auto_login"];
// 3.立刻同步
[defaults synchronize];
}
/* 偏好设置——读取数据 */
- (void)read {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *account = [defaults objectForKey:@"account"];
BOOL autoLogin = [defaults boolForKey:@"auto_login"];
NSLog(@"%@ -- %d", account, autoLogin);
}
3. 对象归档 NSKeyedArchiver
/* 归档——存储自定义对象 */
Person *p = [[Person alloc] init];
p.age = 18;
p.name = @"qr";
// 拼接文件名
NSString *path = NSTemporaryDirectory() stringByAppendingPathComponent:@"person.data"];
[NSKeyedArchiver archiveRootObject:p toFile:Path];
// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
/* Person 类中要实现的方法 */
// 遵守< NSCoding > 协议
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
————————————————————————————
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning [super initWithCoder]
// 这里不能用[super initWithCoder],什么时候调用[super initWithCoder:aDecoder]:只要父类遵守了NSCoding协议,就调用
if (self = [super init]) {
// 解档
// 注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}