数据持久化------Archiving(归档,解档)
其中TRPerson为自定义的继承自NSObject的类的子类 其中有两个属性,name 和 age
.h文件
#import
@interface TRPerson : NSObject<</span>NSCoding>
@property (nonatomic,strong)NSString *name;
@property (nonatomic,strong)NSNumber * age;
//初始化方法
- (id)initWithName:(NSString*)name withAge:(NSNumber *)age;
@end
.m文件
#import "TRPerson.h"
@implementation TRPerson
- (id)initWithName:(NSString *)name withAge:(NSNumber *)age{
if (self=[super init]) {
self.age=age;
self.name=name;
}
return self;
}
#pragma mark - NSCoding
//对属性进行解码(时机:执行encodeObject方法)
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self= [super init];
if (self) {
self.name= [aDecoder decodeObjectForKey:@"name"];
self.age=[aDecoder decodeObjectForKey:@"age"];
}
return self;
}
//对属性进行编码的方法
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.age forKey:@"age"];
[aCoder encodeObject:self.name forKey:@"name"];
}
- (NSString *)description{
TRPerson *person=[[TRPerson alloc]initWithName:self.name withAge:self.age];
return [NSString stringWithFormat:@"name:%@ age:%@",person.name ,person.age];
}
@end
ViewController中的viewDidLoad方法中实现数据的归档和解挡
- (void)viewDidLoad {
[super viewDidLoad];
//准备工作
//将自定义的TRPerson对象进行归档(写)
TRPerson *person=[[TRPerson alloc]initWithName:@"张飞" withAge:@20];
//Documents/archiving
NSString *doumentsPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES).firstObject;
NSString *archiverPath = [doumentsPath stringByAppendingPathComponent:@"archving"];
//1.可变数据类型
NSMutableData *data=[NSMutableData data];
//2.归档对象
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
//3.编码
[archiver encodeObject:person forKey:@"person"];
//4.编码完成
[archiver finishEncoding];
//5.写入文件
[data writeToFile:archiverPath atomically:YES];
//将自定义的TRPerson对象进行解挡(读)
//1.读取数据
NSData *readingData=[NSData dataWithContentsOfFile:archiverPath];
//2.解码对象
NSKeyedUnarchiver *unArchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:readingData];
//3.解码
TRPerson *personRead=[unArchiver decodeObjectForKey:@"person"];
//4.完成解码
[unArchiver finishDecoding];
//验证
NSLog(@"%@",personRead );
}
数据持久化------Archiving(归档,解档)的更多相关文章
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- IOS数据存储之归档/解档
前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...
- IOS s数据存储之归档解档
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...
- iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...
- iOS数据持久化存储:归档
在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...
- iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)
在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...
- 归档 & 解档
代码实现 遵守协议 class AccessToken: NSObject, NSCoding 实现协议方法 // MARK: - 归档&解档 required init(coder aDec ...
- iOS 浅赋值、深复制、全然复制的知识点梳理验证(附加归档解档)
写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复 ...
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
随机推荐
- 一张图告诉你如何优化web 性能
- position:relative可以默认提升元素的z-index;
position:relative可以默认提升元素的z-index; 相对没有添加position的元素来说:
- SDUT OJ 2783 小P寻宝记
#include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...
- Swift应用开源项目推荐
1. 风靡全球的2048 2014年出现了不少虐心的小游戏,除了名声大噪的Flappy Bird外,最风靡的应该就是2048了.一个看似简单的数字叠加游戏,却让玩的人根本停不下来,朋友圈还一度被晒分数 ...
- 《think in python》学习-3
函数 函数是指用于进行某种计算的一系列语句的有名称的组合. type(32) 就是一个函数调用的例子 类型转换函数 python提供了一些可将某个值从一种类型转换为另外一个类型的内置函数 int(32 ...
- 自学XSL的几个例子
XSL 指扩展样式表语言(EXtensible Stylesheet Language).XSL用来描述XML文件的格式,类似于我们可以用CSS描述HTML的格式.具体用法请转:http://www. ...
- NavigationBar--修改返回按钮的标题
UIBarButtonItem *backItem = [[[UIBarButtonItem alloc] init] autorelease]; backItem.title = @"返回 ...
- 基于php常用正则表达整理(上)
电子邮件:/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/变量:/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ 基于p ...
- Tomcat启动失败的解决方法
在使用Tomcat的时候,经常会遇到启动失败的问题:解决方法:1.检查环境变量的配置,jdk的配置2.检查端口是否被占用. 关于环境变量的配置很容易搜到,如果按照网上的教程配置好了,但是还是启动失败的 ...
- 非常值得学习的java 绘图板源代码
package minidrawpad; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; impor ...