复杂对象的本地化(以Person为例)

Person.h

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Person : NSObject <NSCoding>
 4
 5 /// 姓名
 6 @property (nonatomic, copy) NSString *name;
 7
 8 /// 性别
 9 @property (nonatomic, copy) NSString *gender;
10
11 /// 年龄
12 @property (nonatomic, assign) NSInteger age;
13
14 @end

Person.m

 1 #import "Person.h"
 2
 3 @implementation Person
 4
 5 // 归档
 6 // 将所有属性进行归档
 7 - (void)encodeWithCoder:(NSCoder *)aCoder {
 8
 9     [aCoder encodeObject:self.name forKey:@"name"];
10     [aCoder encodeObject:self.gender forKey:@"gender"];
11     [aCoder encodeInteger:self.age forKey:@"age"];
12 }
13
14 // 解档
15 - (instancetype)initWithCoder:(NSCoder *)aDecoder {
16
17     self = [super init];
18     if (self) {
19         self.name = [aDecoder decodeObjectForKey:@"name"];
20         self.gender = [aDecoder decodeObjectForKey:@"gender"];
21         self.age = [aDecoder decodeIntegerForKey:@"age"];
22     }
23     return self;
24 }
25
26 @end

ViewController.m

 1 #import "ViewController.h"
 2 #import "Person.h"
 3
 4 @interface ViewController ()
 5
 6 @end
 7
 8 @implementation ViewController
 9
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12
13     // 如果把一个Person类型的对象存入本地,这个对象必须遵守NSCoding协议,实现协议中的两个方法
14
15 #pragma mark - 复杂对象的本地化
16
17     // 1.找到Documents文件夹的目录
18     NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
19
20     // 2.创建Person对象
21     Person *person = [[Person alloc] init];
22     person.name = @"卫庄";
23     person.gender = @"男";
24     person.age = 18;
25
26     // 3.把这些复杂对象归档并存储
27     // 3.1 创建NSMutableData,用于初始化归档工具
28     NSMutableData *data = [NSMutableData data];
29     // 3.2 创建归档工具
30     NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
31     // 3.3 对需要归档的对象进行归档
32     [archiver encodeObject:person forKey:@"person"];
33     // 3.4 结束归档
34     [archiver finishEncoding];
35 //    NSLog(@"%@", data);
36
37     // 4.将归档的内容NSMutableData存储到本地
38     NSString *personPath = [documentPath stringByAppendingPathComponent:@"person.plist"];
39     [data writeToFile:personPath atomically:YES];
40     NSLog(@"%@", personPath);
41
42
43 #pragma mark - 解档
44
45     // 1.将要解档的数据找出来
46     NSData *resultData = [NSData dataWithContentsOfFile:personPath];
47
48     // 2.创建解档工具
49     NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultData];
50
51     // 3.对Person对象进行解档(要使用对象去接收)
52     Person *newPerson = [unarchiver decodeObjectForKey:@"person"];
53
54     // 4.结束解档
55     [unarchiver finishDecoding];
56     NSLog(@"name = %@, gender = %@, age = %ld", newPerson.name, newPerson.gender, newPerson.age);
57
58 }
59
60 @end
时间: 2024-10-12 12:48:45

复杂对象的本地化(以Person为例)的相关文章

010-Scala单例对象、伴生对象实战详解

010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被其他的类或者对象访问 伴生类访问伴生对象的成员时,要通过名称.成员来访问 调用一些元素的方法初始化创建的时候,例如:Array(1,2,,34,5,6)其实调用了它的apply()方法 欢迎广大爱好者学习交流.也欢迎广大学习爱好者加入 DT大数据梦工厂交流群:462923555 DT大数据微信公众账

数据本地化之沙盒机制

1.什么是沙盒机制(SandBox)?每个iOS应用程序都会为自己创建一个文件系统目录(文件夹),这个独立,封闭,安全的空间,叫做沙盒. 注意:1.每一个应用程序都会拥有一个应用程序沙盒. 2.每一个程序沙盒就是一个文件系统目录. 2.沙盒的特点 3.沙盒的文件夹及各个文件夹的作用 4.简单数据类型写入本地(字符串,数组,字典,NSData类型的数据存储在本地) #pragma mark - 简单对象的本地持久化    #pragma mark - 将NSString类型的数据存储到本地   

UISenior之数据的本地化持久化

数据的本地化主要分为两个方面:1.简单数据的本地持久化(NSString.NSArray.NSDictionary.NSData)2.复杂数据的本地持久化(本文以Person类为例) 简单对象的本地化: 简单对象的本地化基本可以分为四步: 第一步:找到Documents的文件夹的路径. 第二步:我们要知道存储什么,所以要创建存储的对象 第三步:需要知道字符串最终的存储的地方,所以需要创建一个路径去存储字符串 第四步:准备工作完成,将字符串写入文件 下面具体实现上述四步: 第一步 //    第一

java 对象数组

数组是引用类型,而类同样是引用类型,所以如果是对象数组的话表示一个引用类型里面嵌套其他引用类型. 在前面两篇都是属于基本数据类型的数据,但是索引的引用数据类型也同样可以定义数组,这样的数组称为对象数组. 以类为例定义对象数组: 动态初始化:   //开辟之后对象数组的内容都是默认值,即null值 类名称 对象数组名称 [ ]  = new 类名称 [长度] : 分步完成: 声明对象数组: 类名称 对象数组名称 [ ]  = null ; 开辟对象数组:对象数组名称 = new 类名称 [长度]

设计模式的征途—1.单例(Singleton)模式

单例模式属于创建型模式的一种,创建型模式是一类最常用的设计模式,在软件开发中应用非常广泛.创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展.每一个创建型模式都在视图回答3个问题:3W -> 创建什么(What).由谁创建(Who)和何时创建(When). 本篇是创建型模式的第一篇,也是最简单的一个设计模式,虽然简单,但是其使用频率确是很高的. 单例模式(Singleton) 学习难度:★☆☆☆☆ 使用频率:★★★★☆ 一.单例

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

iOS 设计模式之单例

设计模式:单例 一.  单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 单例模式的要点有三个:一是某个类只能有一个实例,二是它必须自行创建这个实例,三是它必须自行向整个系统提供这个实例. 二.单例模式结构图: 三. 单例的好处: 1.实例控制:单例模式会阻止其他对象实例化其自己的单例对象

焦点 、event对象、事件冒泡、事件绑定、AJAX知识点备忘

焦点:使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入. 设置焦点的几种方式: 1.点击 2.TAB键 3.JS onfocus   onblur 属性 var oinp=document.getElementById('shuru') oinp.onfocus=function(){ if(oinp.value=='请输入'){ oinp.value='' } } oinp.onblur=function(){ if(oinp.value==''){ oinp

软件工程——理论、方法与实践 之 面相对象分析

软件工程——理论.方法与实践 之 面向对象分析 在需求获取阶段,开发人员关注于理解用户以及他们的使用需求.而在需求分析阶段,开发人员关注于理解系统需求构建的内容,其核心是产生一个准确的.完整的.一致的和可验证的系统模型称为分析模型. 面向对象的分析模型由三个独立的模型组成: 1.功能模型:由用例和场景表示. 2.分析对象模型:由用例图和对象图表示. 3.动态模型:由状态图和顺序图表示. 在分析对象模型中,分析类是概念层次上的内容,用于描述系统中较高层次的对象.在分析阶段,分析类直接与应用逻辑相关