需要编写对象必须实现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; @end Person.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; @end Face.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. openerp经典收藏 对象定义详解(转载)

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

  2. sql server查询可编程对象定义的方式对比以及整合

    本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4. ...

  3. js对象定义

    JS中的对象定义方式,跟服务端,还是有很大差别的! 现在来说一下JS类的定义 工厂模式 function creatHeven(name,age){ var temp =new Object(); t ...

  4. 使用prototype 对象定义类成员

    使用prototype 对象定义类成员上一节介绍了类的实现机制以及构造函数的实现,现在介绍另一种为类添加成员的机制:prototype 对象.当new 一个function 时,该对象的成员将自动赋给 ...

  5. javascript对象定义和操作

    //js对象定义有三种方式//js方法定义有三种方式 function fn(){} var fun = function(){} var fun = new function() {} //**** ...

  6. asp.net MVC中使用Autofac小结 (遇到的最傻错误: 没有为该对象定义无参数的构造函数)

    项目使用的MVC4,.net 4.5 Nuget安装最新的autofac,一直提示不支持.net 4.5.没办法了,最后用Nuget控制台安装的老版本.因为我使用的是MVC4,所以直接安装的是auto ...

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

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

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

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

  9. kbmmw ORM 对象定义语法简析

    使用kbmmw 的ORM 一定先要了解ORM 的对象定义语法. 下面简单说一下 // kbmMW_Table - Define a table. 定义一个表 // Must be used on cl ...

随机推荐

  1. 推荐一款功能强大的js 在线编辑器

    http://jszi.cn/public/oherub/11/edit

  2. Processing.js

    Processing.js Processing.js 1.4.1 released!

  3. [51daifan]来吧,一起书写51daifan的成长史吧-让一部分人先安全起来

    对新创项目而言,是idea更重要,还是执行力更重要?在没有用户时,我们该如何冷启动?团队.人.技术.产品.推广和拜春哥,哪一个更重要?到底是什么决定了一个项目的生存或者毁灭? 来吧,一起书写51dai ...

  4. 第四章 Spring与JDBC的整合

    这里选择的是mysql数据库. 4.1引入aop.tx的命名空间 为了事务配置的需要,我们引入aop.tx的命名空间 <?xml version="1.0" encoding ...

  5. [C++STDlib基础]关于日期时间的操作——C++标准库头文件<ctime>

    总结 /* A.头文件<ctime> #if _GLOBAL_USING && !defined(RC_INVOKED) _STD_BEGIN 1.四个数据类型 using ...

  6. Jar包转成Dll的方式(带嵌套的jar也能做)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

  7. 常用的JQuery数字类型验证正则表达式

    var regexEnum = {  intege:"^-?[1-9]//d*$",     //整数  intege1:"^[1-9]//d*$",     ...

  8. C++学习笔记10-面向对象

    1.  面向对象的程序设计是基于三个基本概念:数据抽象.继承和动态绑定. 在C++ 在,凭借一流的数据抽象,随着一类从一个类派生还继承:派生类的成员继承基类.决定是使用基类中定义的函数还是派生类中定义 ...

  9. [C++]函数指针与指针函数

    函数指针与指针函数,之前总是分不清,今天就好好把它两认认清楚. 先从概念说起,简单是理解. 函数指针:是指针.一个指向某一个函数入口地址的指针. 指针函数:是函数.一个返回值是指针的函数. 记忆: 从 ...

  10. 2014最新SSH框架面试题大收集

    (1)Hibernate工作原理及为什么要用? 原理:  1.读取并解析配置文件  2.读取并解析映射信息,创建SessionFactory  3.打开Sesssion  4.创建事务Transati ...