iOS开发-本地存储(偏好设置,Plist,归档)

时间:2024-07-08 13:34:50

1.   NSUserDefaults

    //TODO: 1.NSUserDefaults    NSUserDefaults类除了可以存储数组、字典、NSdata外,还可以直接存储OC基本类型属性。但是不能直接作用到自定义对象.
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@""];//设置初始值
[[NSUserDefaults standardUserDefaults] synchronize];//进行同步 [[NSUserDefaults standardUserDefaults] objectForKey:@""];//取值

2.    Plist

    //TODO: 2.Plist文件
//1.根据已有plist文件取值
NSString *pathString = [[NSBundle mainBundle] pathForResource:@"Property List" ofType:@"plist"];
//如果plist文件是一个NSArray,用数组取
NSArray *array = [NSArray arrayWithContentsOfFile:pathString];
//如果plist文件是一个NSDictionary,用字典取
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:pathString];
    //2.创建plist文件
NSArray *homeDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentString = homeDirectory[];
NSString *documentPath = [documentString stringByAppendingPathComponent:@"GCD.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:documentPath contents:nil attributes:nil]; NSArray *fileArray = @[@{@"name":@"one"},@{@"name":@"two"}];
[fileArray writeToFile:documentPath atomically:YES];//写入数据 NSArray *readArray = [NSArray arrayWithContentsOfFile:documentPath];//读取数据

3.  归档、解档

    //TODO: 3.归档/解档
archiveModel *model = [[archiveModel alloc]init];
model.name = @"小明";
model.age = @"";
model.sex = @"男"; NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [pathArray[] stringByAppendingPathComponent:@"model"]; /*
一.只归档一个对象 [NSKeyedArchiver archiveRootObject:model toFile:filePath];
*/ /*
一.只解档一个对象
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
//路径存在
archiveModel *readModel = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"解档:%@",readModel);
}
*/ //二.归档多个对象
NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[keyedArchiver encodeObject:model forKey:@"model"];
//[keyedArchiver encodeObject:model forKey:@"key1"];
//[keyedArchiver encodeObject:model forKey:@"key2"];
[keyedArchiver finishEncoding]; if ([data writeToFile:filePath atomically:YES]) {
NSLog(@"归档成功");
} //二.解档多个对象
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSKeyedUnarchiver *keyedUnarchive = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"model"];
//archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"key1"];
//archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"key2"];
[keyedUnarchive finishDecoding]; }