数据存储值归档Archive
先比較一下各个数据存储之间的关系:
关于归档。是ios中的shu'j数据存储中的一种数据存储方式。以下了解一下归档中的一个实例:
以下的是父类person
#import <Foundation/Foundation.h> @interface Person : NSObject <NSCoding>
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int age;
@property (nonatomic,assign ) BOOL sex;
@property (nonatomic,assign) float height;
@property (nonatomic,assign) double weight;
@end #import "Person.h" @implementation Person //有存必然是有取。所以存是为了取
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
NSLog(@"存在");
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeInt32ForKey:@"age"];
self.sex = [aDecoder decodeBoolForKey:@"sex"];
self.height = [aDecoder decodeFloatForKey:@"height"];
self.weight = [aDecoder decodeDoubleForKey:@"weight"];
}
return self;
} -(void)encodeWithCoder:(NSCoder *)aCoder{ //有文件就能够看出编码的是一个方式编码
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
[aCoder encodeBool:self.sex forKey:@"sex"];
[aCoder encodeFloat:self.height forKey:@"height"];
[aCoder encodeDouble:self.weight forKey:@"weight"]; }
@end
子类student继承person类: #import <Foundation/Foundation.h>
#include "Person.h" @interface Student : Person @property (nonatomic,copy )NSString * content;
@property (nonatomic,assign ) float grade; @end
#import "Student.h" @implementation Student //有存必然是有取,所以存是为了取
- (id)initWithCoder:(NSCoder *)aDecoder{ if (self = [super initWithCoder:aDecoder]) {
NSLog(@"存在");
self.content = [aDecoder decodeObjectForKey:@"content"];
self.grade = [aDecoder decodeFloatForKey:@"grade"];
}
return self;
} -(void)encodeWithCoder:(NSCoder *)aCoder{ [super encodeWithCoder:aCoder];
//有文件就能够看出编码的是一个方式编码
[aCoder encodeObject:self.content forKey:@"content"];
[aCoder encodeFloat:self.grade forKey:@"grade"]; } @end
以下是在ViewController中中对数据通过两button对数据进归档和解归档
#import "ViewController.h"
#import "Person.h"
#import "Student.h" @interface ViewController ()
//分别室保存和获取的两个button
- (IBAction)saveArchive:(id)sender;
- (IBAction)obtainUnarchive:(id)sender;
@end @implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
} //保存数据
- (IBAction)saveArchive:(id)sender { NSLog(@"開始编码归档而且保存");
//归档需要要素:1、保存对象 2、保存的文件文件夹 3、保存管理器(归档器) //获取要保存的对象,对象必需要幼稚等等
// Person *person = [[Person alloc]init];
// person.age = 18;
// person.name = @"linyu";
// person.sex = YES; //表示为男的
// person.height = 180;
// person.weight = 60; Student *stu = [[Student alloc]init];
stu.age = 18;
stu.name = @"linyu";
stu.sex = YES;
stu.height = 180;
stu.weight = 60;
stu.content = @"I am a student !";
stu.grade = 98.9; //获取要保存文件的路径
NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString * dir = [documentDir stringByAppendingString:@"doc.txt"];
NSLog(@"%@",dir);
[NSKeyedArchiver archiveRootObject:stu toFile:dir];
} //获取数据
- (IBAction)obtainUnarchive:(id)sender {
//获取归档之后的内容、
NSLog(@"获取内容");
NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString * dir = [documentDir stringByAppendingString:@"doc.txt"];
Student *per = [NSKeyedUnarchiver unarchiveObjectWithFile:dir];
NSLog(@"%@",dir);
NSLog(@"%@ %d %d %.2f %.2f %.2f %@",per.name,per.age,per.sex,per.height,per.weight,per.grade,per.content);
}
@end
输出的结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
总结:
我们能够知道文件归档:
1、编号设置(preferrence)NSUserDefault:这个事实上也是通过plist文件来存储的。仅仅只是时里面已经通过封装了以后台上面了。存储在preferrence文件里。
2、plist文件。通过自己获取文件的路径(而且创建)。将数据存储到里面。这里一般都是在dorectory这个文件夹以下。
3、归档:归档的数据存储是经过一定的压缩。所以显示的不是明文的存储方式,而且归档是用来存储对象的。
4、注意要存储的类中遵循NSCoding 协议。
四种存储数据的方式中上面的两种方式是仅仅能够存储对应的主要的数据类型。——> 产生归档的方式进行存储。
(能够存储对象)
每次归档对象时,都会调用这种方法。一般在这种方法里面指定怎样归档对象中的每一个实例变量,能够使用encodeObject:forKey:方法归档实例变量
每次从文件里恢复(解码)对象时,都会调用这种方法。一般在这种方法里面指定怎样解码文件里的数据为对象的实例变量,能够使用decodeObject:forKey方法解码实例变量
数据存储值归档Archive的更多相关文章
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
- iOS开发UI篇—ios应用数据存储方式(归档) :转发
本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist ...
- ios应用数据存储方式(归档) - 转
一.简单说明 1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦. 2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...
- IOS数据存储之归档/解档
前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- ios数据存储——对象归档
归档:数据从内存与闪存相互转化,类似“序列化”,将数据转换成二进制字节数据 操作:有两种方式,第一种是单个对象作为root进行归档和恢复,一个对象一个文件:第二种,可以同时归档多个对象到一个文件 注意 ...
- IOS s数据存储之归档解档
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...
- iOS数据存储之对象归档
iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...
- iOS数据持久化存储之归档NSKeyedArchiver
归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),收集了网上的一些资料并结合自己的一些经验,总结如下. 一.使用archiveRootObject进行简 ...
随机推荐
- Linux 文件系统权限
文件权限管理 文件系统上的权限是指文件和目录的权限,权限主要针对三类对象(访问者)定义 owner group other 属主 属组 其它 每个文件对每类访问者都定义了三种 ...
- numpy基础篇-简单入门教程1
np.split(A, 4, axis=1),np.hsplit(A, 4) 分割 A = np.arange(12).reshape((3, 4)) # 水平方向的长度是4 print(np.spl ...
- [HAOI2006]旅行(并查集)
寒假填坑五十道省选题——第五道 [HAOI2006]旅行 题目描述 Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,…,N),这些景点被M条道路 ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- Spring Boot学习总结(1)——Spring Boot入门
摘要:Spring Boots是为了帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用. 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boo ...
- js 阻断网页选中和右键
$(document).bind("contextmenu", function () { return false; }); $(document).bind("sel ...
- js斐波那契数列求和
一.递归算法 function recurFib(n) { if (n < 2) { return n; } else { return recurFib(n-1) ...
- Android禁止ViewPager的左右滑动
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40744287 有时候在开发中会遇到一些"诡异"的要求,比方在V ...
- Git简介以及与SVN的区别
Git是由著名Linux内核(Kernel)开发者LinusTorvalds为了便利维护Linux而开发的. Git是一个分布式的版本控制系统.作为一个分布式的版本控制系统,在Git中并不存在主库这样 ...
- Linux企业应用--RHAS 2.1 下安装中文 Lotus Domino R 6.5 图解
原文请到ftp.jms165.com下载,是用上传用户 (RHAS3+ksnapshot+OperOff ...