NSUserDefaults写作和阅读对象定义自己
需要编写对象必须实现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写作和阅读对象定义自己的更多相关文章
- openerp经典收藏 对象定义详解(转载)
对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- sql server查询可编程对象定义的方式对比以及整合
本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4. ...
- js对象定义
JS中的对象定义方式,跟服务端,还是有很大差别的! 现在来说一下JS类的定义 工厂模式 function creatHeven(name,age){ var temp =new Object(); t ...
- 使用prototype 对象定义类成员
使用prototype 对象定义类成员上一节介绍了类的实现机制以及构造函数的实现,现在介绍另一种为类添加成员的机制:prototype 对象.当new 一个function 时,该对象的成员将自动赋给 ...
- javascript对象定义和操作
//js对象定义有三种方式//js方法定义有三种方式 function fn(){} var fun = function(){} var fun = new function() {} //**** ...
- asp.net MVC中使用Autofac小结 (遇到的最傻错误: 没有为该对象定义无参数的构造函数)
项目使用的MVC4,.net 4.5 Nuget安装最新的autofac,一直提示不支持.net 4.5.没办法了,最后用Nuget控制台安装的老版本.因为我使用的是MVC4,所以直接安装的是auto ...
- .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”
当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...
- SQL Server中授予用户查看对象定义的权限
SQL Server中授予用户查看对象定义的权限 在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数. ...
- kbmmw ORM 对象定义语法简析
使用kbmmw 的ORM 一定先要了解ORM 的对象定义语法. 下面简单说一下 // kbmMW_Table - Define a table. 定义一个表 // Must be used on cl ...
随机推荐
- MFC 对话框中动态创建N级菜单以及响应事件
创建一个基于对话框的工程,工程名为CreateMenu 为该对话框增加一个文件菜单项和测试菜单项,如下图所示 测试菜单项至少要有一个子菜单项 在对话框属性中关联该菜单 在resource.h中增加 ...
- Delphi的TService的輸入桌面切換(服务程序)(windows登录界面如何截图)(使用了OpenDesktop和GetThreadDesktop等API)
dfm: object CopyDeskService: TCopyDeskService OldCreateOrder = False OnCreate = ServiceCreate OnD ...
- java中文排序问题(转)
在Java中,对一个数组或列表(在本文中统称为集合)中的元素排序,是一个很经常的事情.好在Sun公司在Java库中实现了大部分功能.如果集合中的元素实现了Comparable接口,调用以下的静态(st ...
- 关于IOCP,某些地方就是不让人彻底舒服(WSASend重叠post数据)
开门见山,直接就事论事. 假如有这么一个基于IOCP模型的Server,这个Server提供的所有服务中有这么一种服务……文件下载,我们再假设Server端存有一个20G的文件,客户端这时发送一个请求 ...
- python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET
python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET python random模块 分类: python 2011-11-15 15:31 6037人阅读 评论(2) ...
- uva 357 Let Me Count The Ways(01背包)
题目连接:357 - Let Me Count The Ways 题目大意:有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 解题思路:和uva674是一 ...
- go运算符
package main import ( "fmt" ) func main() { fmt.Println(^) } -3 package main import ( &quo ...
- NDK-gdb的错误ERROR(不同于上一篇): Could not extract package's data directory...的解决方法
这个问题比较龟毛. 我的系统在4.0.4上一直调试好好的,到了2.2的系统居然fail.能检查的地方全部检查过了,居然不行. 最后仔细差了一遍,居然是由于/data目录的属性是777导致.ndk-gd ...
- DotNetBar怎样控制窗口样式
DotNetBar怎样控制窗口样式 老帅 在C#中使用控件DevComponents.DotNetBar时,怎样创建一个美丽的窗口.并控制窗口样式呢? 1.新建一个DotNetBar窗口 ...
- NET Core RC2
.NET Core RC2/RTM 明确了时间表 .NET Core 经过了将近2年的开发,去年12月份发布的RC1版本,明确来说那只是一个beta版本,自从RC1发布以来,看到github里的RC2 ...