需要编写对象必须实现NSCoding protocol

Person Class

Person.h#import <Foundation/Foundation.h>#import "Face.h"@interface Person : NSObject <NSCoding>@property (nonatomic, strong) NSString      *personId;
@property (nonatomic, strong) NSString      *name;
@property (nonatomic, assign) NSInteger      age;
@property (nonatomic, strong) NSArray       *photos;
@property (nonatomic, strong) NSDictionary  *phoneNumber;@property (nonatomic, strong) Face          *face;@endPerson.m#import "Person.h"@implementation Person
@synthesize personId    = _personId;
@synthesize name        = _name;
@synthesize age         = _age;
@synthesize photos      = _photos;
@synthesize phoneNumber = _phoneNumber;
@synthesize face        = _face;- (id)initWithCoder:(NSCoder *)aDecoder
{if(self = [super init]){self.personId       = [aDecoder decodeObjectForKey:@"id"];self.name           = [aDecoder decodeObjectForKey:@"name"];self.age            = [[aDecoder decodeObjectForKey:@"age"] integerValue];self.photos         = [aDecoder decodeObjectForKey:@"photos"];self.phoneNumber    = [aDecoder decodeObjectForKey:@"phoneNumber"];self.face           = [aDecoder decodeObjectForKey:@"face"];}return self;
}- (void)encodeWithCoder:(NSCoder *)aCoder
{[aCoder encodeObject:self.personId forKey:@"id"];[aCoder encodeObject:self.name forKey:@"name"];[aCoder encodeObject:[NSNumber numberWithInteger:self.age] forKey:@"age"];[aCoder encodeObject:self.photos forKey:@"photos"];[aCoder encodeObject:self.phoneNumber forKey:@"phoneNumber"];[aCoder encodeObject:self.face forKey:@"face"];
}

Face Class

Face.h#import <Foundation/Foundation.h>@interface Face : NSObject <NSCoding>@property (nonatomic, strong) NSString *head;
//@property (nonatomic, strong) NSString *eyes;
//@property (nonatomic, strong) NSString *nose;
//@property (nonatomic, strong) NSString *mouth;
//@property (nonatomic, strong) NSString *ears;@endFace.m#import "Face.h"@implementation Face- (id)initWithCoder:(NSCoder *)aDecoder
{if(self = [super init]){self.head   = [aDecoder decodeObjectForKey:@"head"];}return self;
}- (void)encodeWithCoder:(NSCoder *)aCoder
{[aCoder encodeObject:self.head forKey:@"head"];
}@end
写入和读取操作Person *person = [[Person alloc] init];person.personId = @"123456789";person.name = @"Hunk";person.age = 10;person.photos = @[@"a.png", @"b.png", @"c.png"];person.phoneNumber = @{@"mobile_phone" : @"987654321", @"work" : @"01012345678"};Face *face = [[Face alloc] init];face.head  = @"Round shape";person.face = face;NSData *personData0 = [NSKeyedArchiver archivedDataWithRootObject:person];[[NSUserDefaults standardUserDefaults] setObject:personData0 forKey:@"person"];[[NSUserDefaults standardUserDefaults] synchronize];NSData *personData1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"person"];Person *person1 = [NSKeyedUnarchiver unarchiveObjectWithData:personData1];

版权声明:本文博主原创文章,博客,未经同意不得转载。

NSUserDefaults写作和阅读对象定义自己相关推荐

  1. [置顶] 为什么要阅读源代码?如何有效的阅读源代码? 选一些比较优秀的开源产品作为源代码阅读对象?...

    盛大TeamHost上有个关于学习开源项目的wiki :http://www.teamhost.org/projects/learn-with-open-source/wiki/Wiki 一.为什么要 ...

  2. 为什么要阅读源代码?如何有效的阅读源代码? 选一些比较优秀的开源产品作为源代码阅读对象?

    一.为什么要阅读源代码? 很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的.甚至是优秀的文学作品. 而程序员与此类似,很多程序员也需要阅读大量的优秀程序 ...

  3. openerp经典收藏 对象定义详解(转载)

    对象定义详解 原文地址: http://shine-it.net/index.php/topic,2159.0.html http://blog.sina.com.cn/s/blog_57ded94e ...

  4. .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”...

    当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误 运行所选代码生成器时出错 无法检索"XXX"的元数据 没有为该对象定义无参数构造函数 ...

  5. 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值

    这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到.这里拿出来比较一下. 首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是 oper ...

  6. SQL Server中授予用户查看对象定义的权限

      在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数.视图授予查看定义的权限,那么就像下面脚本所示,比较 ...

  7. Geometry(几何对象定义空间位置和关联几何形状)

    Geometry 描述 几何对象定义空间位置和关联几何形状. 讨论 在许多地理处理工作流中,您可能需要使用坐标和几何信息运行特定操作,但不一定想经历创建新(临时)要素类.使用光标填充要素类.使用要素类 ...

  8. 南大通用数据库-Gbase-8a-学习-34-gcdump(导出数据库对象定义)

    目录 一.测试环境 二.介绍 三.命令帮助 四.参数介绍 1.--print-defaults (1)含义 (2)例子 2.--connect_timeout (1)含义 (2)例子 3.-A, -- ...

  9. wordVBA运行时错误‘4198‘:应用程序定义或对象定义错误 解决方法

    项目场景: Word VBA 问题描述: 最近在学习wordVBA时遇到以下问题:运行时错误'4198':应用程序定义或对象定义错误 这是我写的一段Excel VBA操作Word的代码,作用是打开已存 ...

最新文章

  1. 折腾了一晚上Windows网络却未果
  2. vCloud Automation Center (vCAC) 6.0 (二)
  3. 【AI2】更新app inventor2离线开发环境AppInventor2021,安卓app图形化开发环境
  4. Linux平台下 vimrc配置(转网友:http://blog.csdn.net/wooin/article/details/1887737)
  5. 网络分流器|运营商光纤延距解决方案
  6. CPU,MPU,MCU,SOC,SOPC联系与差别
  7. react项目打包后路径找不到,项目打开后页面空白的问题
  8. 英语口语-文章朗读Week8 Friday
  9. Hibernate5-1对多(1:n)-级联删除-cascade=delete-orphanl
  10. 如何激活windows的远程终端
  11. 计算机毕业设计ssm汽车租赁系统42876系统+程序+源码+lw+远程部署
  12. We Will Rock You
  13. 南阳oj入门题-阶乘因式分解(一)
  14. 新版标准日本语中级_第二十三课
  15. Excel 2010 SQL应用048 比较两列数据是否相同
  16. WINVNC源码分析(三)——omni_thread库
  17. 递归算法与非递归算法的转化
  18. LS1046A QSPI FLASH memory map setting
  19. bonjour 概述
  20. 设置套接字属性和获取套接字属性,举例子设置套接字端口可重用

热门文章

  1. 聊聊 API Gateway 和 Netflix Zuul
  2. 记录:成功配置 centos + nginx + .net core 2.0
  3. 关于Android 的内存泄露及分析
  4. 【计算几何】【极角序】【二分】bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形
  5. CentOS下编译安装LAMP开发环境
  6. 用Word2007写Blog
  7. PPC莫名死机,上周末为此hard reset了两次重装,这几天又历史重演,今天再次硬复位。想我那个Palm TT...
  8. 《Ray Tracing in One Weekend》——Chapter 9: Dielectrics
  9. 问题四十四:怎么用ray tracing画空间任意位置的圆环的任意片段
  10. 大数据分析入门小技巧