持久化存储---归档一
一、流程图
二、代码
1.模型归档
(1)
@interface Person : NSObject<NSCoding>//归档调用的方法 - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeInteger:self.age forKey:@"age"]; [aCoder encodeObject:self.address forKey:@"adress"]; [aCoder encodeObject:self.photo forKey:@"photo"]; } //反归档调用的方法 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{ if (self = [super init]) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; self.address = [aDecoder decodeObjectForKey:@"adress"]; self.photo = [aDecoder decodeObjectForKey:@"photo"]; } return self; } + (NSString *)getTheFilePath:(NSString *)filePath{ NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:filePath]; return path; }
(2)
//1.归档类名:NSKeyedArchiver,解归档类名:NSKeyedUnarchiver //2.归档和解档的类必须遵守<NSCoding>,且必须实现- (void)encodeWithCoder:(NSCoder *)aCoder(归档,字段写入)和- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder(返归档的方法,根据key解出) //3.定义归档路径 //4.调用归档和解档的方法 //---------归档与解档一,存储模型, //归档 //1.存储的路径 //2.存储后的对象数据 //3.创建归档工具 //4.将对象按指定路径归档 NSString *arcHome = [Person getTheFilePath:@"arcHome.archiver"]; Person *person = [[Person alloc] init]; person.name = @"仔"; person.age = [@28 integerValue]; person.address = @"以色列"; person.photo = [UIImage imageNamed:@"Snip20170215_1"];
BOOL isSucces = [NSKeyedArchiver archiveRootObject:person toFile:arcHome]; if (isSucces) { NSLog(@"%@",arcHome); } //解档 Person *persons = [NSKeyedUnarchiver unarchiveObjectWithFile:arcHome]; NSLog(@"name=%@age=%ldadress=%@photo=%@",persons.name,persons.age,persons.address,persons.photo);
2.数组及字典其它方式归档
//---------归档与解档三,存储数组或字典 //1.存取的数据 //2.存取的路径 //3.准备存储数据的对象如NSMutableData //4.创建归档,开始归档对象,完成归档 //5.写入文件中 Person *students = [Person new]; students.name = @"zi"; students.age = [@18 integerValue]; students.address = @"shanghai"; students.photo = [UIImage imageNamed:@"1.png"]; NSString *dataPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"dataPath.archiver"]; NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:students forKey:@"archiver"]; [archiver finishEncoding]; BOOL result = [data writeToFile:dataPath atomically:YES]; if (result) { NSLog(@"写入成功"); }else{ NSLog(@"写入失败"); } //----解档 //1.准备解档路径,根据存储路径来返回Data //2.创建反归档对象 //3.反归档 //4.完成反归档 NSData *studentData = [NSData dataWithContentsOfFile:dataPath]; NSKeyedUnarchiver *unarch = [[NSKeyedUnarchiver alloc] initForReadingWithData:studentData]; Person *stu = [unarch decodeObjectForKey:@"archiver"]; [unarch finishDecoding]; NSLog(@"student-->%@--%ld--%@--%@",stu.name,stu.age,stu.address,stu.photo);
将来的自己,会感谢现在不放弃的自己!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现