数据存储之归档解档

归档也叫序列化,是将文件存在硬盘,解码是从硬盘还原
一、使用属性列表进行归档
  如果对象是NSString,NSDictionary,NSArray,NSData,NSNumber,NSDate,可以是使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文。
  NSArray
*inputArray = [NSArray arrayWithObjects:@“abc”, @“123”,
@“qiaohaibin”];
  //写入文件
当前目录下test.plist
  //一般写入都是写入沙盒Documents下
  BOOL result = [inputArray
writeToFile:@“test.plist”
atomically:YES];
  if(!result){
    NSLog(@“fail to write to
file”);
  }
  //读出文件
  NSArray *outputArray = [NSArray
arrayWithContentsOfFile:@“test.plist”];
  NSLog(@“%@“,
outputArray);
二、使用NSKeyedArchiver和NSkeyedUnarchiver进行归档和解档。
  //文件完整路径
  NSString
*filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
  NSString *fileName = [filePath
stringByAppendingPathComponent:@“test.archive"];
  1.对上面所说的类和基本数据进行归档和解档
    //归档
    NSMutableData
*inputData = [NSMutableData data];
    NSKeyedArchiver *archiver =
[[NSKeyedArchiver alloc]
initForWritingWithMutableData:inputData];
    [archiver
encodeObject:[NSArray arrayWithObject:@“qiaohaibin”]
forKey:@“array”];
    [archiver encodeInt:24
forKey:@“age”];
    [archiver finishEncoding];
    BOOL result =
[inputData writeToFile:fileName
atomically:YES];
    if(!result){
      NSLog(@“fail to archive to
file”);
    }
    //解档
    NSData *outputData = [NSMutaleData
data];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData:outputData];
    NSArray *array = [unarchiver
decodeObjectForKey:@“array”];
    int age = [unarchiver
decodeIntForKey:@“age”];
  2.自定义对象进行归档和解档(需要事项NSCoding协议)
    //归档时调用
    -
(void)encodeWithCoder:(NSCoder *)aCoder{
      [aCoder encodeInt:_age
forKey:@“AGE”];
      [aCoder encodeObject:_username
forKey:@“USERNAME”];
    }

    //解档时调用
    - (id)initWithCoder:(NSCoder
*)aDecoder{
      self.age = [aDecoder
decodeObjectForKey:@“AGE”];
      self.username = [aDecoder
decodeObjectForKey:@“USERNAME”];
    }

数据存储之归档解档,布布扣,bubuko.com

时间: 2024-10-12 22:22:03

数据存储之归档解档的相关文章

IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver)

前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档和解档.我们先来回顾一下JAVA是怎么实现保存一个自定义对象的!首先一个自定义对象必须实现Serializable接口,然后把一个对象序列化成二进制数据写入一个byte[]数据或者文件,反之则是从一个二进制数据或者文件中读取二进制数据反序列化成对象,所以我认为ios的归档解档其实就是类似JAVA序列化反序列化的过程,下面写个程序来尝试一下. 先测试下基础类型: //归

iOS归档解档

使用NSKeyedArichiver进行归档.NSKeyedUnarchiver进行接档,这种方式会在写入.读出数据之前对数据进行序列化.反序列化操作. 1.对单个字符串归档 //获取根目录 NSString *homeDictionary = NSHomeDirectory(); //添加储存的文件名 NSString *homePath = [homeDictionary stringByAppendingPathComponent:@"myText.txt"]; //归档一个字符

IOS利用objc/runtime和KVC——快速归档解档

开发过程中有时需要存储一些轻量级的数据,对于IOS提供的几种数据存储方式在这时最合适当属对象归档:NSCoding 但是将对象数据进行归档解档时候需要实现两个方法: encodeWithCoder和initWithEncoder.encodeWithCoder就是编码,initWithCoder就是解码. encodeWithCoder方法传入的是一个NSCoder对象,实现的时候我们就可以调用encodeObject.encodeFloat. encodeInt等各种方法并通过指定键值进行编码

OS开发UI篇—ios应用数据存储方式(归档)

OS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 02

iOS开发UI篇—ios应用数据存储方式(归档)

iOS开发UI篇-ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 0

归档 解档

//系统类型的对象归档(NSString/NSArray/NSDictionary) //1.设置归档路径,该路径需要详细到文件(不能是文件夹) //2.得到要归档的对象 //3.通过NSKeyedArchiver调用archiveRootObject方法,进行归档 //4.解档 通过NSKeyedUnarchiver调用unarchiveObjectWithFile进行解档,注意,该方法返回值类型为id //字符串的归档 解档 NSString *path = NSHomeDirectory(

iOS 浅赋值、深复制、完全复制的知识点梳理验证(附加归档解档)

写于前: 在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值,本文将对这几个概念进行验证梳理. (单层和完全概念区分:例如多层数组只实现一层内容拷贝,其他层为指针拷贝成为单层深复制:若多层内容都实现拷贝称为完全赋值) 程序中用到的几点概念补充 (1) 浅复制(shallow copy):在浅复制操作时,对于被复制对象的每一层都是指针复制. 深复制(

Swift 使用Runtime对模型进行归档解档

Swift 使用Runtime对模型进行归档解档 func encode(with aCoder: NSCoder) { var count: UInt32 = 0 let propertyList = class_copyPropertyList(self.classForCoder, &count) for index in 0..<Int(count) { guard let pty = propertyList?[index], let cName = property_getNam

ios应用数据存储方式(归档)

ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 9 #import "YYViewController.h" 10 #impo