iOS 歸檔數(shù)據(jù)

歸檔數(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容