iOS 归档数据

作者: 旅途开发者 | 来源:发表于2017-07-26 14:34 被阅读273次

    归档数据属于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

    相关文章

      网友评论

        本文标题:iOS 归档数据

        本文链接:https://www.haomeiwen.com/subject/suznkxtx.html