利用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. io资料

    jitsi red5 apache meeting2 openmeeting2 openfire http://www.onlycoder.net/ 在视频会议领域,有许多可以值得参考的开源项目,这些 ...

  2. Git Shell使用笔记

    1,首次打开Git shell错误(以前打开过gethub客户端) 警告: git command could not be found. Please create an alias or add ...

  3. PHP-FPM + Nginx: 502错误

    /etc/php5/fpm/pool.d/www.conf 里面找到这样一段代码: listen = 127.0.0.1:9000 在这上面代码的下面添加一行: listen = /var/run/p ...

  4. 使用PHP发送邮件的两种方法

    使用PHP发送邮件的两种方法 May242013 作者:Jerry Bendy   发布:2013-05-24 22:25   分类:PHP   阅读:2,107 views   抢沙发     今天 ...

  5. 五一结束,北戴河,yy,差一点,不太敢

    collectionView Cell 设置颜色,蓝色,但是其他cell颜色也蓝色了,因为只写了if 没写else if (indexPath.item == 0) { cell.background ...

  6. B-Tree indexs

    mysql_High.Performance.MySQL.3rd.Edition.Mar.2012 A B-Tree index speeds up data access because the s ...

  7. App之百度云推送

    集成SDK 下载最新的Android SDK压缩包并解压,在新建工程或已有工程中增加百度云推送功能. 我下载的是 ,里面有一个同名的文件夹,文件夹中有 导入云推送jar包和so文件: 将解压后的lib ...

  8. CentOS 6.5 源码安装MySQL5.6.26

    1:下载安装cmake (mysql5.5以后是通过cmake来编译的) 2:创建mysql的安装目录及数据库存放目录 #mkdir /usr/mysql                 //安装my ...

  9. java 开发, jdk 1.6 官方下载地址

    在oracle官方网站默认下载的jdk是最新的,目前正式版是1.8. 但有些项目要求是1.6的jdk,费了九牛二虎之力终于找到了1.6的官方版本,链接如下: http://www.oracle.com ...

  10. Delphi 缩放图像代码 - 支持PNG透明通道

    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...