OC-多个自定义对象的归档与解归档

本文介绍如何使用Objective-C对多个自定义对象进行归档与解归档操作。通过实例演示了Dog和Cat类的归档过程,并详细展示了如何通过NSKeyedArchiver和NSKeyedUnarchiver来编码和解码这些自定义对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于上一章节,简单讲述了一个自定义对象的归档与解归档:http://www.cnblogs.com/BeyondAverage0908/p/4597245.html

本章节阐述下多个自定义对象的归档与解归档

以下代码阐述:定义了两个类Dog和Cat,并且利用@property展开了对应的几个属性(简单的代码,不贴源码了)。

以下代码部分位主要的归档与解归档代码:注意需要在对应的自定义类中实现以下两个方法:- (void)encodeWithCoder:(NSCoder *)aCoder;方法,- (id)initWithCoder:(NSCoder *)aDecoder;     具体的实现详情见上一篇博客内容

#import "Dog.h"
#import "Cat.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义Dog对象
        Dog *xiaohei = [[Dog alloc] init];
        xiaohei.name = @"小黑";
        xiaohei.age = 12;
        
        Cat *xiaomao = [[Cat alloc] init];
        xiaomao.name = @"小猫";
        xiaomao.nickname = @"阿花";
        xiaomao.weight = 2.03;
        
        //归档
        //定义一个可变数据对象(必须),在编码的时候存储自定义对象
        NSMutableData *mutDate = [NSMutableData data];
        NSKeyedArchiver *keyedArch = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mutDate];
        //对 dog 和 cat 进行格式编码
        [keyedArch encodeObject:xiaohei forKey:@"xiaohei"];
        [keyedArch encodeObject:xiaomao forKey:@"xiaomao"];
        //结束编码
        [keyedArch finishEncoding];
        
        BOOL flag = [mutDate writeToFile:@"/Users/qianfeng/Desktop/day22_OC12_协议/day22_OC12_自定义对象归档与解归档/dogandcat.txt" atomically:YES];
        if (flag) {
            NSLog(@"多个自定义对象归档成功");
        }else{
            NSLog(@"多个自定义对象归档失败");
        }
        
        
        //解归档:将归档后的文件中的对象读取出来
        NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/day22_OC12_协议/day22_OC12_自定义对象归档与解归档/dogandcat.txt"];
        NSKeyedUnarchiver *keyedUnarch = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        Dog *nDog = [keyedUnarch decodeObjectForKey:@"xiaohei"];
        Cat *nCat = [keyedUnarch decodeObjectForKey:@"xiaomao"];
        [keyedUnarch finishDecoding];
        NSLog(@"nDog = %@",nDog);
        NSLog(@"nCat name = %@,nickname = %@,weight = %.2f",nCat.name,nCat.nickname,nCat.weight);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/BeyondAverage0908/p/4597406.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值