使用NSUserDefaults保存自定义对象(转)
转自http://zani.iteye.com/blog/1431239
.h文件
#import <Foundation/Foundation.h> @interface MyObject : NSObject
{
NSNumber* lowValue;
NSNumber* highValue; NSString* titleString;
}
@property(nonatomic, retain)NSNumber* lowValue;
@property(nonatomic, retain)NSNumber* highValue; @property(nonatomic, retain)NSString* titleString;
@end
.m
#import "MyObject.h" @implementation MyObject
@synthesize lowValue, highValue, titleString;
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.lowValue forKey:@"lowValue"];
[encoder encodeObject:self.highValue forKey:@"highValue"];
[encoder encodeObject:self.titleString forKey:@"titleString"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
if(self = [super init])
{
self.lowValue = [decoder decodeObjectForKey:@"lowValue"];
self.highValue = [decoder decodeObjectForKey:@"highValue"];
self.titleString = [decoder decodeObjectForKey:@"titleString"];
}
return self;
} @end
保存单个MyObject方法:
- (void)saveCustomObject:(MyObject *)obj
{
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"];
}
- (MyObject *)loadCustomObjectWithKey:(NSString *)key
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [defaults objectForKey:key];
MyObject *obj = (MyObject *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
return obj;
} 保存:
MyObject* testObj = [[MyObject alloc] init];
testObj.lowValue =[NSNumber numberWithFloat:122.2 ];
testObj.highValue = [NSNumber numberWithFloat: ];
testObj.titleString = @“baoyu”; 读取:
MyObject* obj = [self loadCustomObjectWithKey:@"myEncodedObjectKey"];
NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString);
保存多个MyObject方法:
保存:
NSMutableArray* array = [[NSMutableArray alloc] init];
for(int i=; i<; i++)
{
MyObject* testObj = [[MyObject alloc] init];
testObj.lowValue =[NSNumber numberWithFloat:122.2+i ];
testObj.highValue = [NSNumber numberWithFloat:+i ];
testObj.titleString = [NSString stringWithFormat:@"BAOYU%d", i]; [array addObject:testObj]; }
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:array] forKey:@"myarray"]; 读取:
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myarray"]; NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
for(MyObject* obj in oldSavedArray)
{
NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString);
}
使用NSUserDefaults保存自定义对象(转)的更多相关文章
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象 - lady-奕奕的个人空间 - 开源中国社区
一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前 ...
- 转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
转自:http://my.oschina.net/u/1245365/blog/294449 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密 ...
- Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式
Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...
- NSUserDefault 保存自定义对象
由于NSUserDefaults 不支持保存自定类,保存的对象需要实现NSCoding协议,不过自定的类型就算实现了NSCoding也不可以保存,可以通过以下方法实现: //h文件 #import & ...
- NSUserDefaults存储自定义对象
场景是这样的: 现在有一个数组如下,数组中存放着自定义的对象GoodscCategory <__NSArrayM 0x7ffb9c2032b0>( <GoodscCategory: ...
- 使用 NSUserDefaults 读取和写入自定义对象
众所周知,NSUserDefaults只能保存诸如NSArray.NSDictionary.NSData.NSNumber等基本数据类型,如果我们强制保存自定义的类,就会出现这个错误:Attempt ...
- IOS 如何持久化自定义对象 2014-08-01 01:38
如果持久话自定义对象 那么这个对象一定要遵循 NSCoding 协议 并实现编解码:然后再将编解码后的数据 NSKeyedArchiver 到NSData中 @interface NSKeyAnd ...
- Sqlite 存储自定义对象
在iOS中如果想保存自定义对象,要让自定义对象实现NSCoding接口并实现方法-(id)initWithCoder:(NSCoder *)coder和-(void)encodeWithCoder:( ...
随机推荐
- Python Redis pipeline操作(秒杀实现)
设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次.如果能一次性将100个请求提交给redis server,执 ...
- python read文件的r和rb的区别
r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截断以前的内容 'a':表示要向文件 ...
- MC20模块教程目录
MC20模块使用教程 为了阅读和修正方便,所有教程在线观看,请在有网络的环境下观看下面教程,谢谢! MC20模块教程在线目录 第一章:基础使用,使用电脑调试MC20的各项功能 1.1 使用电脑测试MC ...
- requirejs源码分析: 路径
1. 没有设置baseUrl(一般我们都会设置baseurl) 在没有设置baseUrl时, 默认 baseurl: "./" 当指定data-mai ...
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
- pyhton3 configparser模块
1 #!/usr/bin/env python 2 # coding=utf-8 3 __author__ = 'Luzhuo' 4 __date__ = '2017/5/26' 5 # config ...
- OpenGL学习进程(8)第六课:点、边和图形(三)绘制图形
本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识: (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”. ...
- 【HackerRank】Gem Stones
Gem Stones John has discovered various rocks. Each rock is composed of various elements, and each el ...
- iMX6 yocto平台QT交叉编译环境搭建
转:https://blog.csdn.net/morixinguan/article/details/79351909 . /opt/fsl-imx-fb/4.9.11-1.0.0/environm ...
- 跨平台移动开发 Xuijs超轻量级的框架 Dom与Event简洁代码实现文本展开收起
Dom与Event简洁代码实现文本展开收起 Xuijs超轻量级的框架 Dom与Event实现文本展开收起 效果图 示例代码 <!DOCTYPE html PUBLIC "-//W3C/ ...