一、NSCoding协议中的Archiving和Unarchiving

(1)Archiving一个object,会记录这个对象的所有的properties到filesystem;

(2)Unarchiving一个object,会从data中重新创建这个object。

类中的实例要Archiving和Unarchiving,需遵守NSCoding协议,要实现以下两个方法:

@protocol NSCoding
-(void)encodeWithCoder:(NSCoder*)aCoder;
-(instancetype)initWithCoder:(NSCoder*)aCoder;
@end

例:

//存
-(void)encodeWithCoder:(NSCoder*)aCoder{
    [aCoder encodeObject:self.itemName forKey:@"itemName"];
    [aCoder encodeInt:self.valueInDollars forKey:@"valueInDollars"];
}

//取
-(instancetype)initWithCoder:(NSCoder*)aCoder{
   self = [super init];
   if(self){
        _itemName = [aDecoder decodeObjectForKey:@"itemName"];
        _valueInDollars = [aDecoder decodeIntForKey:@"valueInDollars"];
    }
   return self;
}

类似地,

XIB file被保存,即是把views  archived  into XIB file;

当应用程序启动时,从XIB file里unarchive the views。

二、使用NSCoder的子类在sandbox中存取

应用程序的sandbox是一个目录,包括:Documents、Library(不会在应用程序退出时删除)、tmp(会在应用程序退出时删除)。

NSCoder的子类,这里指:NSKeyedArchiver和NSKeyedUnArchiver这两个类。

例:

//生成file path
-(NSString *)itemArchivePath {
  NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
  NSString *documentDirectory = [documentDirectories firstObject];
   return [ documentDirectory stringByAppendingPathComponent:@"items.archive"];
}

//存
-(BOOL)saveChanges {
   NSString *path = [self itemArchivePath];
    return [NSKeyedArchiver archiveRootObject:XXX toFile:path];
}

//取
-(instancetype)initPrivate {
   self = [super init];
   if(self){
       NSString *path = [self itemArchivePath];
       _privateItem = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
  }
  return self;
}
NSKeyedArchiver存对象的过程分为两步:(1)先调用encodeWithCoder来encode变量到NSKeyedArchiver;(2)再存到path。
三、用NSData写入FileSystem
例:
-(NSString*)imagePathForKey:(NSString*)key{
    NSArray *documentDirectories =....;
    NSString *documentDirectory = ...;
    return [documentDirectory stringByAppendingPathComponent:key];
}

//写入
NSString *imagePath = [self imagePathForKey:key];
NSData *data = UIImageJPEGRepresentation(image,0.5);
[data writeToFile:imagePath automically:YES];

//删除
[[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil];

//读取
UIImage *image = [UIImage imageWithContentOfFile:imagePath];
其中NSFileManager可以获取、创建、拷贝以及移动文件和目录。
 

Objective-C数据保存和读取的更多相关文章

  1. C# 结构体和List<T>类型数据转Json数据保存和读取

    C#  结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...

  2. Numpy之数据保存与读取

      在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处.本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大 ...

  3. Java+MySql图片数据保存与读取的具体实例

    1.创建表: drop table if exists photo;CREATE TABLE photo (    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ...

  4. C/C++语言之由数字26引起的文件的数据保存与读取调试。

    首先在VS2010中遇到的问题是,建立了一个结构体 struct position{ int x; int y; }: 然后用此结构体声明一个数组rout[8]; for(int i=0;i<8 ...

  5. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  6. Python中数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

  7. 【转】基本数据持久性(一) 使用plist保存和读取数据

    原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...

  8. 2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取

    paddlepaddle将数据保存为recordio文件并读取 因为有时候一次性将数据加载到内存中有可能太大,所以我们可以选择将数据转换成标准格式recordio文件并读取供我们的网络利用,接下来记录 ...

  9. Numpy中数据的常用的保存与读取方法

    小书匠 深度学习  文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...

随机推荐

  1. C#与Java多态方面的语法差异

    C++.C#.Java,无奈三种语言让我多次混淆,多次搞清楚,不写个Demo我想还是会忘记的. 就好像是一个满水的杯子,倒掉一点,才能装下更多. 有时候博客就是一个倒水的地方,可以让我们清空自己,然后 ...

  2. STM32F407Discovery开发板使用环境搭建

    差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...

  3. PHP的两种表单数据提交方式

    1 通过隐藏表单提交 //通过隐藏表单提交 if ($_POST['action'] == 'register'){ echo '你提交了数据'; exit(); } ?> <!DOCTY ...

  4. 【Java EE 学习 30】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】

    一.闪回 1.可能的误操作 (1)错误的删除了记录 (2)错误的删除了表 (3)查询历史记录 (4)撤销已经提交了的事务. 2.对应着以上四种类型的误操作,有四种闪回类型 (1)闪回表:将表回退到过去 ...

  5. Oracle 11g RAC 卸载CRS步骤

    Oracle 11g之后提供了卸载grid和database的脚本,可以卸载的比较干净,不需要手动删除crs ##########如果要卸载RAC,需要先使用dbca删除数据库,在执行下面的操作### ...

  6. STM32解密STM32F103芯片解密STM32F103R6单片机破解多少钱?

    STM32解密STM32F103芯片解密STM32F103R6单片机破解多少钱? STM32F系列单片机芯片解密型号: STM32F100  |  STM32F101  |  STM32F102  | ...

  7. 转:AngularJS的Filter用法详解

    Filter简介 Filter是用来格式化数据用的. Filter的基本原型( '|' 类似于Linux中的管道模式): {{ expression | filter }} Filter可以被链式使用 ...

  8. Web服务器基础学习

    1)Socket通信相当于两个人通过电话联系,Http协议相当于电话联系时所使用的中文2)Http1.1前均为短连接,1.1版本为长连接,即服务器接收一次请求并发送响应后会等待一段时间看浏览器是否在这 ...

  9. asp.net三层架构详解

    一.数据库 /*==============================================================*/ /* DBMS name:      Microsof ...

  10. 解决使用osgModeling的Loft生成管子时的bug(续)

    今天发现有一些情况下, 还是无法生成管道, 排查了一天发现问题好像出在管线头两个点的x完全相同时, 会出这个问题.   看了半天的Loft源码, 发现问题出在Loft::considerBasisX函 ...