iOS 归档数据

归档数据属于iOS开发中一种保存数据的机制,属于本地保存,一般都是把要保存的数据建立一个模型,该模型只需要要遵守NSCoding协议即可,代码如下:

模型的h文件:


iOS 归档数据_第1张图片

模型的m文件,这里要注意的是,在m文件中要实现h文件中的两个类,因为截图没办法截完整,截图这里显示有重复的部分,如果要查看详细的代码,可以去github上查询,下面有链接地址


iOS 归档数据_第2张图片


iOS 归档数据_第3张图片

然后就是应用部分,首先要确定路径

//获取沙盒路径

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];

iOS 归档数据_第4张图片


iOS 归档数据_第5张图片

取出数据,这里只需要知道储存的类型,以及接受的类型就可以直接拿出来数据了

例如:

//获取沙河路径

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);

}

iOS 归档数据_第6张图片

该demo的github地址为:demo

你可能感兴趣的:(iOS 归档数据)