歸檔數(shù)據(jù)屬于iOS開發(fā)中一種保存數(shù)據(jù)的機(jī)制,屬于本地保存,一般都是把要保存的數(shù)據(jù)建立一個(gè)模型,該模型只需要要遵守NSCoding協(xié)議即可,代碼如下:
模型的h文件:

模型的m文件,這里要注意的是,在m文件中要實(shí)現(xiàn)h文件中的兩個(gè)類,因?yàn)榻貓D沒辦法截完整,截圖這里顯示有重復(fù)的部分,如果要查看詳細(xì)的代碼,可以去github上查詢,下面有鏈接地址


然后就是應(yīng)用部分,首先要確定路徑
//獲取沙盒路徑
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//獲取文件全路徑《如果是單個(gè)數(shù)據(jù),一般采用的是data類型的數(shù)據(jù)保存,如果多個(gè)數(shù)據(jù),比如數(shù)組類型的就會(huì)保存為.plist文件》
NSString * pathName = [path stringByAppendingString:@"/Coding.data"];//單個(gè)數(shù)據(jù)
NSString * pathNames = [path stringByAppendingString:@"/CodingArray.plist"];//多個(gè)數(shù)據(jù)
然后就是數(shù)據(jù)的賦值,這個(gè)和oc里面對(duì)模型的賦值是一樣的
//儲(chǔ)存單個(gè)數(shù)據(jù)
SYCodingModel * model = [[SYCodingModel alloc]init];
model.name = @"蔡文姬";
model.sex = @"女";
model.age = 20;
//儲(chǔ)存多個(gè)數(shù)據(jù)
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];
}
//儲(chǔ)存單個(gè)嵌套數(shù)據(jù)
SYCodingClassModel * classModel = [[SYCodingClassModel alloc]init];
classModel.className = @"三年級(jí)二班";
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;
以上三種情況基本上包含了平常用到的,然后是添加進(jìn)去
//單個(gè)模型,直接存放模型
[NSKeyedArchiver archiveRootObject:model toFile:pathName];
//多個(gè)數(shù)據(jù),直接存放數(shù)組
[NSKeyedArchiver archiveRootObject:array toFile:pathNames];


取出數(shù)據(jù),這里只需要知道儲(chǔ)存的類型,以及接受的類型就可以直接拿出來數(shù)據(jù)了
例如:
//獲取沙河路徑
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"];
//解析文件
//單個(gè)數(shù)據(jù)
SYCodingModel * model = [NSKeyedUnarchiver unarchiveObjectWithFile:pathName];
NSLog(@"拿到的數(shù)據(jù)。 %@。%@。%ld",model.name,model.sex,model.age);
//數(shù)組數(shù)據(jù)
NSArray * listArray = [NSKeyedUnarchiver unarchiveObjectWithFile:pathNames];
for (SYCodingModel * model in listArray) {
NSLog(@"拿到的數(shù)據(jù)。 %@。%@。%ld",model.name,model.sex,model.age);
}
//單個(gè)嵌套數(shù)據(jù)
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(@"拿到的數(shù)據(jù)。===== %@。%@。%ld",modelS.name,modelS.sex,modelS.age);
}

該demo的github地址為:demo