利用NSUserdefaults来存储自定义的NSObject类及自定义类数组

1.利用NSUserdefaults来存储自定义的NSObject类

利用NSUserdefaults也可以来存储及获取自定义非框架类对象,不过自定义的NSObject类需要实现NSCoding协议(包含2个必须实现的方法)。存储过程是将自定义的NSObject转换成NSData存储。

存储:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:thekey];
[[NSUserDefaults standardUserDefaults] synchronize];

获取:
NSData *ldta = [[NSUserDefaults standardUserDefaults] objectForKey:thekey];
object = [NSKeyedUnarchiver unarchiveObjectWithData:data];

2.利用NSUserdefaults来存储自定义对象的数组

2.1 归档数组中存储的自定义类必须实现NSCoding协议

//WZToDoItem.h文件
#import <Foundation/Foundation.h>
@interface WZToDoItem : NSObject<NSCoding>
@property (copy,nonatomic) NSString *text;
@end //WZToDoItem.m文件
#import "WZToDoItem.h"
@implementation WZToDoItem
//NSCoding协议必须实现方法1
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.text forKey:@"TEXT"];
}
//NSCoding协议必须实现方法2
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
self.text = [aDecoder decodeObjectForKey:@"TEXT"];
}
return self;
}
@end

2.2 将包含自定义WZToDoItem对象的数组转换成NSData来存储

- (void)viewDidLoad {

    //创建自定义对象的数组arrayM
NSMutableArray *arrayM = [NSMutableArray array];//可变数组初始化才能用
for (int i = ; i < arr.count; i++) {
WZToDoItem *toDoItem = [[WZToDoItem alloc]init];
toDoItem.text = [NSString stringWithFormat:@"这是第%d个代办事项",i];
[arrayM addObject:toDoItem];
}
//存储
NSUserDefaults *userDfs = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arrayM];
[userDfs setObject:data forKey:@"toDoItems"];
[userDfs synchronize]; //获取
NSData *data = [[NSUserDefaults standardUserDefaults] dataForKey:@"toDoItems"];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]; }

利用NSUserdefaults来存储自定义的NSObject类及自定义类数组的更多相关文章

  1. (bug更正)利用KVC和associative特性在NSObject中存储键值

    KVC 一直没仔细看过KVC的用法,想当然的认为可以在NSObject对象中存入任意键值对,结果使用时碰到问题了. 一个简单的位移动画: CAKeyframeAnimation *keyPosi=[C ...

  2. IOS开发---菜鸟学习之路--(十九)-利用NSUserDefaults存储数据

    利用NSUserDefaults的可以快速的进行本地数据存储,但是支持的格式有限, 至于支持什么格式大家可以再自行脑补 我这边直接讲如何使用 NSUserDefaults 分为两部分 一个是存数据 N ...

  3. iOS - OC NSUserDefaults 数据存储

    前言 @interface NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults ...

  4. iOS - Swift NSUserDefaults 数据存储

    前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefault ...

  5. [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较

    转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...

  6. python中面向对象元类的自定义用法

    面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...

  7. 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

    折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Gen ...

  8. 在Visual Studio中使用Debug Visualizers在C++中实现对原始类的自定义调试信息显示

    在Visual Studio中使用Debug Visualizers在C++中实现对原始类的自定义调试信息显示 当我们在VS的C++中使用vector.list.map等这些STL容器,在开启调试的时 ...

  9. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

随机推荐

  1. js - 犀牛学习

    1.id选择器 var ul = document.getElementById("empty"); 2.属性和事件配置 li.className = "ditem&qu ...

  2. Jquery - Select 和 Checkbox 、Textarea的操作

    Checkbox //判断是否选中 if ($(this).is(':checked')) { alert("它处于选中状态"); } else { alert("它不处 ...

  3. [转]SEP 11.x 迁移

    Sepm 迁移/灾难恢复     条件:更换服务器主机/重装服务器系统,但保持主机ip地址不更改,主机名不更改.     备份步骤:     Login 服务器控制台,进入"管理员" ...

  4. 2016.07.14,英语,《Vocabulary Builder》Unit 25

    verb: comes from the Latin verbum, meaning 'word'. verbally: ['vɜːbəli] adv. 口头地,词句地, 逐字地 verbalize: ...

  5. Web 在线文件管理器学习笔记与总结(3)创建文件

    ① 创建文件 a. 文件名的合法性:不能包含 \/:*"<>| 等特殊字符 b. 检测当前目录下是否存在同名文件,如果存在提示请重命名后创建,如果不存在则直接创建 index.p ...

  6. Python常用函数笔记

    1.lambda lambda其实就是一条语句,lambda(x):body.x是lambda函数的参数,参数可以有任意多个(包括可选参数);body是函数体,只能是一个表达式,并且直接返回该表达式的 ...

  7. IT运维的五大基础知识

    IT运维的五大基础知识 | 浏览:331 | 更新:2014-09-25 11:36 IT运维对于很多企业都很重要,接下来运维的一些基础知识天天客服IT运维总监龙少文,就给大家介绍下IT运维的基础知识 ...

  8. PHPSTORM/IntelliJ IDEA 常用 设置配置优化

    PHPSTORM/IntelliJ IDEA 常用 设置配置优化 - meetrice 时间 2014-09-06 10:17:00  博客园-所有随笔区 原文  http://www.cnblogs ...

  9. Moving in Unity

    转自:http://angryant.com/2014/03/07/Moving-in-Unity/ ,详细描述了物体在unity中移动的几种方式,并且给出了代码描述,对加深对Unity理解很有帮助, ...

  10. nginx gzip 模块配置

    #gzip模块设置 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_ve ...