归档数据属于iOS开发中一种保存数据的机制,属于本地保存,一般都是把要保存的数据建立一个模型,该模型只需要要遵守NSCoding协议即可,代码如下:
模型的h文件:
模型的m文件,这里要注意的是,在m文件中要实现h文件中的两个类,因为截图没办法截完整,截图这里显示有重复的部分,如果要查看详细的代码,可以去github上查询,下面有链接地址
然后就是应用部分,首先要确定路径
//获取沙盒路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//获取文件全路径《如果是单个数据,一般采用的是data类型的数据保存,如果多个数据,比如数组类型的就会保存为.plist文件》
NSString * pathName = [path stringByAppendingString:@"/Coding.data"];//单个数据
NSString * pathNames = [path stringByAppendingString:@"/CodingArray.plist"];//多个数据
然后就是数据的赋值,这个和oc里面对模型的赋值是一样的
//储存单个数据
SYCodingModel * model = [[SYCodingModel alloc]init];
model.name = @"蔡文姬";
model.sex = @"女";
model.age = 20;
//储存多个数据
NSMutableArray * array = [[NSMutableArray alloc]init];
for (int i = 0; i < 100; i++) {
SYCodingModel * model1 = [[SYCodingModel alloc]init];
model1.name = nameArray[arc4random()%nameArray.count];
model1.sex = sexArray[arc4random()%sexArray.count];
model1.age = arc4random()%80;
[array addObject:model1];
}
//储存单个嵌套数据
SYCodingClassModel * classModel = [[SYCodingClassModel alloc]init];
classModel.className = @"三年级二班";
classModel.classNumber = 86;
classModel.isFirst = YES;
NSMutableArray * st = [[NSMutableArray alloc]init];
for (int i = 0; i < 86; i++) {
SYCodingModel * codingModel = [[SYCodingModel alloc]init];
codingModel.name = nameArray[arc4random()%nameArray.count];
codingModel.sex = sexArray[arc4random()%sexArray.count];
codingModel.age = arc4random()%20;
[st addObject:codingModel];
}
classModel.students = st;
以上三种情况基本上包含了平常用到的,然后是添加进去
//单个模型,直接存放模型
[NSKeyedArchiver archiveRootObject:model toFile:pathName];
//多个数据,直接存放数组
[NSKeyedArchiver archiveRootObject:array toFile:pathNames];
取出数据,这里只需要知道储存的类型,以及接受的类型就可以直接拿出来数据了
例如:
//获取沙河路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//获取文件路径
NSString * pathName = [path stringByAppendingString:@"/Coding.data"];
NSString * pathNames = [path stringByAppendingString:@"/CodingArray.plist"];
NSString * classPath = [path stringByAppendingString:@"/ClassData.data"];
//解析文件
//单个数据
SYCodingModel * model = [NSKeyedUnarchiver unarchiveObjectWithFile:pathName];
NSLog(@"拿到的数据。 %@。%@。%ld",model.name,model.sex,model.age);
//数组数据
NSArray * listArray = [NSKeyedUnarchiver unarchiveObjectWithFile:pathNames];
for (SYCodingModel * model in listArray) {
NSLog(@"拿到的数据。 %@。%@。%ld",model.name,model.sex,model.age);
}
//单个嵌套数据
SYCodingClassModel * classModel = [NSKeyedUnarchiver unarchiveObjectWithFile:classPath];
NSLog(@"---- %@ %ld %u %ld",classModel.className,classModel.classNumber,classModel.isFirst,classModel.students.count);
for (SYCodingModel * modelS in classModel.students) {
NSLog(@"拿到的数据。===== %@。%@。%ld",modelS.name,modelS.sex,modelS.age);
}
该demo的github地址为:demo