NSUserDefaults 保存自己定义对象

项目里json返回的一个model须要保存下来,这个model是固定的没必须去创建表,想到了NSUserDefaults来存储,暂不考虑安全问题。

NSUserDefaults没法直接存储一个对象。在网上找到了方法。如今分享下。

首先要写一个对象,详细代码例如以下:

.h文件

@interface CustomSerModel : NSObject
@property(nonatomic,retain)NSString *m_deptId;//部门编号
@property(nonatomic,retain)NSString *m_sort_key;//姓名首字母,用于分组排序
@property(nonatomic,retain)NSString *m_imgUrl;//头像地址
@property(nonatomic,retain)NSString *m_imgKey;//头像文件的key
@property(nonatomic,retain)NSString *m_signature;//个性签名
@property(nonatomic,retain)NSString *m_name;//好友姓名
@property(nonatomic,retain)NSString *m_entUserId;//好友企业用户编号
@property(nonatomic,retain)NSString *m_entId;//好友企业编号
@property(nonatomic,retain)NSString *m_address;//地址
@property(nonatomic,retain)NSString *m_mobilePh;//手机号码
@property(nonatomic,retain)NSString *m_sex;//性别
@property(nonatomic,retain)NSString *m_shortPh;//集团短号
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
+(BOOL) ParserJson:(NSString*)json withArray:(NSMutableArray *)array;
@end

.m文件

@implementation CustomSerModel
@synthesize m_deptId,m_sort_key,m_imgUrl,m_imgKey,m_signature,m_name,m_entUserId,m_entId,m_address,m_mobilePh,m_sex,m_shortPh;
-(void)dealloc
{
    [m_deptId release];
    [m_sort_key release];
    [m_imgUrl release];
    [m_imgKey release];
    [m_signature release];
    [m_name release];
    [m_entUserId release];
    [m_entId release];
    [m_address release];
    [m_mobilePh release];
    [m_sex release];
    [m_shortPh release];
    [super dealloc];
}
- (void) encodeWithCoder: (NSCoder *)coder
{
    [coder encodeObject:self.m_deptId forKey:@"DeptId"];
    [coder encodeObject:self.m_sort_key forKey:@"ImgKey"];
    [coder encodeObject:self.m_imgUrl forKey:@"ImgUrl"];
    [coder encodeObject:self.m_signature forKey:@"Signature"];
    [coder encodeObject:self.m_name forKey:@"Name"];
    [coder encodeObject:self.m_entId forKey:@"EntId"];
    [coder encodeObject:self.m_entUserId forKey:@"EntUserId"];
    [coder encodeObject:self.m_address forKey:@"Address"];
    [coder encodeObject:self.m_mobilePh forKey:@"MobilePh"];
    [coder encodeObject:self.m_sex forKey:@"Sex"];
    [coder encodeObject:self.m_shortPh forKey:@"ShortPh"];
}

- (id) initWithCoder: (NSCoder *) coder
{
    m_deptId = [[coder decodeObjectForKey:@"DeptId"]copy];
    m_imgKey = [[coder decodeObjectForKey:@"ImgKey"]copy];
    m_imgUrl = [[coder decodeObjectForKey:@"ImgUrl"]copy];
    m_signature = [[coder decodeObjectForKey:@"Signature"]copy];
    m_name = [[coder decodeObjectForKey:@"Name"]copy];
    m_entId = [[coder decodeObjectForKey:@"EntId"]copy];
    m_entUserId = [[coder decodeObjectForKey:@"EntUserId"]copy];
    m_address = [[coder decodeObjectForKey:@"Address"]copy];
    m_mobilePh = [[coder decodeObjectForKey:@"MobilePh"]copy];
    m_sex = [[coder decodeObjectForKey:@"Sex"]copy];
    m_shortPh = [[coder decodeObjectForKey:@"ShortPh"]copy];

    return self;
}
+(BOOL) ParserJson:(NSString*)json withArray:(NSMutableArray *)array
{
    //此处省略
    return TRUE;
}

@end

定义好对象后如今就是怎么使用了,保存方法:

 NSMutableArray *arr = [[NSMutableArray alloc]init];
            [CustomSerModel ParserJson:json withArray:arr];
            NSData *encodemenulist = [NSKeyedArchiver archivedDataWithRootObject:arr];
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:encodemenulist forKey:@"CustomList"];

获取方法:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *saveMenulistDaate = [defaults objectForKey:@"CustomList"];
    NSMutableArray *arr = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithData:saveMenulistDaate];

完毕,感谢汗清提供的帮忙。

參考:http://zani.iteye.com/blog/1431239

http://blog.csdn.net/jianjianyuer/article/details/10112759

http://blog.sina.com.cn/s/blog_61e26bcb010115cm.html

时间: 2024-07-29 19:42:53

NSUserDefaults 保存自己定义对象的相关文章

iOS自己定义对象保存到本地文件

我是将聊天记录存到本地,里边用到了自己定义的对象.把数据转成Data格式存到本地.在转Data格式的时候报错了.这时候须要先将自己定义对象进行归档才干够转Data格式. 方法例如以下: 一.在.h文件里声明<NSCoding>协议 二.在.m文件里实现encodeWithCoder和intiWithCoder方法 归档之后就把对象存储到字典或数组里,转成Data格式的.再存储到本地就可以. 关于怎么把字典转成Data格式參见我的还有一篇文章: 地址:http://blog.csdn.net/m

NSUserDefaults保存用户名和密码

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *nameTextField; @property (weak, nonatomic) IBOutlet UITextField *ageTextField; @end @implementation ViewController - (void)viewDidLoad { [s

JavaScript学习12 JS中定义对象的几种方式【转】

avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript

(六)javascriptJS中定义对象的几种方式(转)

JavaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascrip

javaScript定义对象的方法

转自souhu新闻http://news.sohu.com/20110215/n279335637.shtml? javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 function User1(name, password) { this.name = name; this.password = password; this.login = function

自己定义对象的监听方式

问题描写叙述: 当一个事件的触发不定期的时候,即我们不知道这个触发何时来到,可是我们却要对这个触发运行某些方法,怎样实现? 可能的解决方式: 我当时就想到了,这个问题类似与Android的部件监听(我没有去看Android的源代码,太懒了...).因为如今还在研读Thinking in Java这样的入门书籍,突然来了想法,罗列例如以下,能够通过接口. 以下是我写的一个測试的样例 首先是一个类似Button的部件 package com.example.androidtest2.service;

TreeSet排序,存储自己定义对象,自己定义比較器演示样例

Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是否为true. |--TreeSet:能够对Set集合中的元素进行排序. 底层数据结构是二叉树. 保证元素唯一性的根据:compareTo方法return 0. TreeSet排序的第一种方式:让元素自身具备比較性. 元素须要实现Comparable接口,覆盖compareTo方法. 也种方式也成为

JavaScript学习12 JS中定义对象的几种方式

JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript"> var object = new Object(); object.name

javascript定义对象写法

javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存[花花评:主要指方法,引用对象适合用此方法初始化,值对象其实无所谓] function User1(name, password) {this.name = name;this.password = password;this.login = function(name,password){if(this.na