ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储
通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里。
NSCoding 跟其他存储方式略有不同,他可以存储对象
对象存储的条件是: 对象需要遵守 NSCoding 协议
存储的时候需要 调用 encodeWithCoder 方法
读取的时候需要调用initWithCoder 方法
[NSKeyedArchiver archiveRootObject:stu toFile:path]; 存储
NSKeyedUnarchiver unarchiveObjectWithFile:path 读取
对象代码
- #import <Foundation/Foundation.h>
- @interface MJStudent : NSObject <NSCoding>
- @property (nonatomic, copy) NSString *no;
- @property (nonatomic, assign) double height;
- @property (nonatomic, assign) int age;
- @end
- #import "MJStudent.h"
- @interface MJStudent()
- @end
- @implementation MJStudent
- /**
- * 将某个对象写入文件时会调用
- * 在这个方法中说清楚哪些属性需要存储
- */
- - (void)encodeWithCoder:(NSCoder *)encoder
- {
- [encoder encodeObject:self.no forKey:@"no"];
- [encoder encodeInt:self.age forKey:@"age"];
- [encoder encodeDouble:self.height forKey:@"height"];
- }
- /**
- * 从文件中解析对象时会调用
- * 在这个方法中说清楚哪些属性需要存储
- */
- - (id)initWithCoder:(NSCoder *)decoder
- {
- if (self = [super init]) {
- // 读取文件的内容
- self.no = [decoder decodeObjectForKey:@"no"];
- self.age = [decoder decodeIntForKey:@"age"];
- self.height = [decoder decodeDoubleForKey:@"height"];
- }
- return self;
- }
- @end
保存读取
- - (IBAction)save {
- // 1.新的模型对象
- MJStudent *stu = [[MJStudent alloc] init];
- stu.no = @"42343254";
- stu.age = 20;
- stu.height = 1.55;
- // 2.归档模型对象
- // 2.1.获得Documents的全路径
- NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- // 2.2.获得文件的全路径
- NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];
- // 2.3.将对象归档
- [NSKeyedArchiver archiveRootObject:stu toFile:path];
- }
- - (IBAction)read {
- // 1.获得Documents的全路径
- NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- // 2.获得文件的全路径
- NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];
- // 3.从文件中读取MJStudent对象
- MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
- NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);
- }
ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储的更多相关文章
- iOS 沙盒目录结构介绍
iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...
- iOS沙盒机制介绍
一.沙盒机制 沙盒的概念:沙盒是每一个iOS应用程序都会自动创建的一个文件系统目录(文件夹),而且沙盒还具有独立.封闭.安全的特点. 沙盒机制 iOS中的沙盒不仅仅是一个文件目录,TA其实更是一种安全 ...
- iOS - 沙盒与目录
NSFileManager NSBundle Class Cluster 采用Tagged Pointer的字符串 NSPathStore iOS证书ipa包重签名探究 url 结构 1. iOS 沙 ...
- iOS沙盒(sandbox)
iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- iOS 阶段学习第25天笔记(iOS沙盒机制介绍)
iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...
- iOS沙盒目录结构解析
iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- IOS沙盒Files目录说明和常用操作
Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...
随机推荐
- cicm0804吊起
CICS调用方法:cicslterm -r RGCIPS /////////////// CECI LINK P(CICM0804) COMM(F0000000000000000000006) --- ...
- how to debug thread cpu 100%
when we write a program, cpu and memory usages are very important to indicate the stability of the p ...
- Windows Phone 8.1开发:如何让ListView滚动到顶部,回到第一条?
Windows Phone 8.1开发中,ListView向下滑动了半天,用户如果突然想回头看看第一条数据怎么办? 如何让listView滚动到顶部,回到第一条? 很简单,一行代码.调用ListVie ...
- python自定义日志函数测试
#!/user/bin/python # -*- encoding: UTF-8 -*- import sys def logs(): print sys._getframe().f_code.co_ ...
- 在linux下查看内核版本、gcc版本、操作系统多少位等参数
1. 查看linux版本 cat /etc/issue Ubuntu 11.04 \n \l 2. 查看内核版本 1)cat /proc/version Linux version 2.6.38-13 ...
- 使用VisualSVN Server自动发布站点
使用VisualSVN Server自动发布站点可以节省大量的发布时间. 适用于项目测试版本 通常一个项目在测试阶段会遇到以下问题 1.开发人员修改缺陷要实时反应到测试环境 2.项目经理想让客户及时看 ...
- WPF中的Style
一.Style基础知识 构成Style最重要的两种元素是Setter和Trigger Setter类帮助我们设置控件的静态外观风格 Trigger类帮助我们设置控件的行为风格 Setter类的Prop ...
- andriod
谷歌提供的安卓源码中,网址如下:http://androidxref.com http://blog.csdn.net/zoe6553/article/details/6622258
- 简单的C#线程开发实例(隔一秒改变一下Label的Text)
要实现的效果:点击按纽,窗口上的label上出现1~100数字的变化. 第一个实例(把窗口上的label上文字改成0): using System; using System.Windows.Form ...
- cocos2dx中创建动画的三种方法
1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg ...