需要编写对象必须实现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. flask开发restful api

    flask开发restful api 如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restfu ...

  2. 基础知识(3)- Java的基本程序设计结构

    3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型  3.3.1 整型  3.3.2 浮点类型  3.3.3 char类型  3.3.4 boolean类型 3.4 变量  3.4.1 ...

  3. 在toolbar里动态创建多个button(ext.net)

    private void setOneMenu() { string sql = "select id,name,gids from Config where name<>'高级 ...

  4. STL 之 queue、priority_queue 源代码剖析

    /* * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute an ...

  5. Ubuntu升级到14.04

    公司网络实在太翔了,搞了一天最终成功把ubuntu从13.10升级到了14.10,中间也越到了非常多问题,记录下来,以备參考. 13.10的时候想体验一把搜狗输入法,结果因为fcitx版本号太低,用了 ...

  6. Java魔法堂:JVM的运行模式 (转)

    一.前言 JVM有Client和Server两种运行模式.不同的模式对应不同的应用场景,而JVM也会有相应的优化.本文将记录JVM模式的信息,以便日后查阅. 二.介绍 在$JAVA_HOME/jre/ ...

  7. linux文件夹介绍

    (1)documentation 这个文件夹下没有内核代码,仅仅有一套实用的文档,但这些文档的质量不一.比如内核文档的文件系统,在该文件夹下有相当优秀并且相当完整的文档:而另外一部分内核,比如进程调度 ...

  8. Apache+Django+Mysql环境配置

    环境要求:Apache:2.2  Mysql:5.5 Django:1.5 python:2.7 首先下载mod_wsgi-win32-ap22py27-3.3.so 下载下来后,改名成mod_wsg ...

  9. [Android学习笔记]双缓冲绘图技术

    双缓冲技术绘图: 什么情况下产生的双缓冲技术?当数据量很大时,绘图可能需要花费很长的时间,这样屏幕就会出现卡顿,闪烁等现象. 什么是双缓冲技术?双缓冲是在内存中创建一个与屏幕绘制区域一致的对象,先将图 ...

  10. Wamp 访问本地站点慢 的解决办法

    自从安装了64位的windows 8.1之后,电脑运行速度变快了,可是重新下载安装64位的WAMP,访问本地的WEB站点确是很慢,根本不像是在本地访问,经过在WAMP论坛上搜索,终于找到了解决办法,主 ...