iOS学习 --- iOS12对象序列化(NSKeyedArchiver/NSKeyedUnarchiver)
admin
2024-03-09 09:44:20
0

NSKeyedArchiver 归档

所谓的归档,就是将数据写到一个文件里面去。一般我们的应用的变量常量之类的数据都是在内存里面的,只要APP关闭,这些数据都会丢失。但是把数据存储到文件里面去,就能将数据保存到本地磁盘里面(目前iOS基本就是在沙盒里面操作了),不管是APP关闭还是重启设备,下次启动APP的时候都能够读出来。

NSKeyedUnarchiver解档

  • 所谓解档(别人也叫反归档),就是将数据从文件里面读取出来。在程序里面使用。

iOS12之前

归档

+ (NSData *)archivedDataWithRootObject:(id)rootObject API_DEPRECATED("Use +archivedDataWithRootObject:requiringSecureCoding:error: instead", macosx(10.2,10.14), ios(2.0,12.0), watchos(2.0,5.0), tvos(9.0,12.0));
NSMutableArray *array = [NSMutableArray array];for (ServiceModel *model in self.selectedArray) {NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];[array addObject:data];}[kUserDefaults setObject:array forKey:keySelectedArray];[kUserDefaults synchronize];

解档

+ (nullable id)unarchiveObjectWithData:(NSData *)data API_DEPRECATED("Use +unarchivedObjectOfClass:fromData:error: instead", macosx(10.2,10.14), ios(2.0,12.0), watchos(2.0,5.0), tvos(9.0,12.0));
NSMutableArray *localArray = [NSMutableArray array];
//获取array	
NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:keySelectedArray];for (NSData *data in array) {//解码ServiceModel*model = [NSKeyedUnarchiver unarchiveObjectWithData:data];[localArray addObject:model];
}

iOS12之后

归档

+ (nullable NSData *)archivedDataWithRootObject:(id)object requiringSecureCoding:(BOOL)requiresSecureCoding error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
NSMutableArray *array = [NSMutableArray array];for (TCMeServiceModel *model in selectedArray) {NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model requiringSecureCoding:YES error:nil];[array addObject:data];}[kUserDefaults setObject:array forKey:keySelectedArray];[kUserDefaults synchronize];

解档

+ (nullable id)unarchivedObjectOfClasses:(NSSet *)classes fromData:(NSData *)data error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
NSMutableArray *localArray = [NSMutableArray array];//获取arrayNSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:keySelectedArray];for (NSData *data in array) {//解码NSSet *classSet = [NSSet setWithObjects:[ServiceModel class],[NSString class], nil];ServiceModel*model = [NSKeyedUnarchiver unarchivedObjectOfClasses:classSet fromData:data error:nil];if (model) {[localArray addObject:model];}}

model

#import NS_ASSUME_NONNULL_BEGIN
@interface ServiceModel : NSObject//NSCopying,NSSecureCoding
/** image */
@property (nonatomic, copy) NSString *image;
/** title */
@property (nonatomic, copy) NSString *title;
/** vc */
@property (nonatomic, copy) NSString *vc;-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)resultListWithDict:(NSDictionary *)dict;@endNS_ASSUME_NONNULL_END
#import "ServiceModel.h"@implementation ServiceModel-(instancetype)initWithDict:(NSDictionary *)dict{self = [super init];if (self) {[self setValuesForKeysWithDictionary:dict];}return self;
}+(instancetype)resultListWithDict:(NSDictionary *)dict{	return [[self alloc]initWithDict:dict];
}+ (BOOL)supportsSecureCoding {return YES;
}//归档
- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {[aCoder encodeObject:_image forKey:@"image"];[aCoder encodeObject:_title forKey:@"title"];[aCoder encodeObject:_vc forKey:@"vc"];
}//解档
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {self = [super init];if (self) {_image = [aDecoder decodeObjectForKey:@"image"];_title = [aDecoder decodeObjectForKey:@"title"];_vc = [aDecoder   decodeObjectForKey:@"vc"];}return self;
}@end

归档存储的是数组,数组中嵌套的是model对象:

另:归档存储的是数组嵌套模型的时候:

①、model对象中要遵循NSSecureCoding协议;

②、model对象.m类中,要实现+ (BOOL)supportsSecureCoding方法,并返回真。

相关文章

iOS - iOS 12 之后的归档(NSKeyedArchiver)、解档(NSKeyedUnarchiver)用法

​​​​​​​ iOS 12对象序列化(NSKeyedArchiver)

iOS应用存储数据的常用的方式之plist和归档​​​​​​​

相关内容

热门资讯

红利VS现金流,两个策略有何不... 最近,总有人问:“红利ETF牛市值得买吗?”或者“听说有个现金流策略更猛,是真的吗?” 其实,这两个...
交通银行招标结果:交通银行交银... 证券之星消息,根据天眼查APP-财产线索数据整理,交通银行股份有限公司2月27日发布《交通银行交银金...
“商转公”遇现实门槛,评估价下... 本报记者 李凯旋 北京报道 “商转公”正在成为购房者降低成本的得力工具。近两年,越来越多的城市执行“...
沪鸽口腔冲击港股IPO,202... 据港交所2月27日披露,Huge Dental Limited(沪鸽)递表港交所主板,中金公司、DB...
中东局势升温,对A股影响几何? (本文作者付一夫,苏商银行特约研究员) 当地时间2月28日,美国和以色列对伊朗发动突袭,中东地缘局势...
80岁中国女首富,不搞金融,不... 郑淑良与张士平 中国女首富,又换人了。 近期,福布斯中国富豪榜更新。在钟睒睒、张一鸣、马化腾这些熟悉...
原创 2... 开年,机器人领域最大融资来了。 2026年的具身智能赛道,银河通用机器人一骑绝尘。近日,这家人形机...
A股午评:油气板块大涨,沪指翻... 2日,A股三大指数低开,随后震荡上行。截至午间收盘,沪指微涨,深证成指跌0.75%,创业板指跌0.7...
油价或飙升至每桶130美元?伊... 3月2日亚洲早盘交易时段,国际油价跳涨,WTI原油期货开盘上涨超11%;布伦特原油开盘飙升13%至每...
2026厦门女性消费月启幕,将... 昨日,2026厦门女性消费月正式启动。 暖“新”市集吸引市民前来打卡。 三月鹭岛,繁花盛开,巾帼芳...
原创 新... 定焦One(dingjiaoone)原创 作者 | 金玙璠 编辑 | 魏佳 3月1日,新势力陆续公布...
一张保单暖乡邻 广大营销员是保险行业开展业务的生力军,处在保险服务人民群众的第一线。抓好营销员党建,让党旗在业务一线...
李槿:3/2美伊冲突升级!黄金... 【烽烟起处藏金贵,乱世方知避险真】 局势未平金不止,风云未定势难休。 美伊冲突升级,伊朗报复警告封锁...
21家系统重要性银行名单出炉:... 来源:中国经营网 中国人民银行联合国家金融监督管理总局近日发布我国系统重要性银行名单。据公示,为构建...
漳州片仔癀药业股份有限公司关于... 来源:上海证券报 证券代码:600436 证券简称:片仔癀 公告编号:2026-008 漳州片仔癀...
财经聚焦|年宵花热销,鲜花消费... 岁律更新,花香涌动。农历马年春节假期,一抹抹亮丽的色彩悄然走进千家万户,成为中国家庭跨年的“新标配”...
LG换挡:借“全球南方”战略开... 2月22日,LG电子在全球的部分南方地区,交出了一份颇为亮亮的“成绩单”。 数据显示,2025年LG...
IPO研究丨本周6家上会,惠科... 瑞财经 李兰3月2日,据上交所、深交所、北交所,本周6家企业上会,暂无新股安排申购。 上周新股首日涨...
从义乌出发,链接丝路:浙江稠州... 世界的义乌,中国的窗口。每日清晨,当第一缕阳光照进义乌国际商贸城,此起彼伏的打包声、货运板的滚动声、...