使用NSUserDefaults存储自定义对象_第1页
使用NSUserDefaults存储自定义对象_第2页
使用NSUserDefaults存储自定义对象_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、、了解NSUserDefaults以及它可以直接存储的类型NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于 数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是 大家喜欢用它保存简单数据的一个主要原因。使用NSUserDefaults存储自定义对象的最初,我们必须认识NSUserDefaults可以存储哪一些类型的数据.下面一一列出:NSUserDefaults 支持的数据类型有:NSNumber (NSInteger、float、double), NSString, NSDate, NS Array, NSDictionary, BOOL如果

2、想要将上述数据类型的数据永久保存到NSUserDefaults中去,只需要 简单的操作(一个Value 个Key),例如,想要保存一个NSString的对象,代码 实现为:将 NSString 对象存储到 NSUserDefaults 中NSString *passWord = "1234567“;NSUserDefaults *user = NSUserDefaults standardUserDefaults;user setObject:passWord forKey:"userPassWord"将数据取出也很简单,只需要取出key对应的值就好了,代码如下:

3、NSUserDefaults *user 二NSUserDefaults standardUserDefaults;NSString *passWord = user objectForKey:,userPassWordM;注意:对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性值得注意的是:NSUserDefaults存储的对象全是不可变的(这一点非常关键,弄错的话程 序会出bug),例如,如果我想要存储一个NSMutableArray对象我必须先创 建一个不可变数组(NSArray)再将它存入NSUserDefaults中去,代码如下:NSMutableArray *mutabl

4、eArray = NSMutableArray arrayWithObjects:Hl 23T234: nil;NSArray * array = NSArray array With Array: mu table Array;NSUserDefaults *user = NSUserDefaults standardUserDefaults;user setObject:array forKey:"记住存放的一定是不可变的”;取出数据是一样的,想要用NSUserDefaults中的数据给可变数组赋值先给出一个错误的写法:NSUserDefaults *user = NSUserD

5、efaults standardUserDefaults;这样写后,mutableArray就变成了不可变数组了,如果你要在数组中添 加或删除数据就会出现bugNSMutableArray *mutableArray = user objectForKey:n记住存放的一定 是不可变的J;正确的写法:/*正确的赋值方法*/NSUserDefaults *user = NSUserDefaults standardUserDefaults;可以用alloc方法代替NSMutableArray *mutableArray = NSMutableArray array With Array: use

6、 r objectForKeX记住存放的一定是不可变的,;二、使用NSUserDefaults存储自定义对象1、将自定义类型转换为NSData类型当数据重复而且多的时候(例如想存储全班同学的学号,性别(这个数 据量可能太大了).如果不用SQLite存储(多数据最好还是用这个),你 可以选择使用归档,再将文件写入本地,但是这种方式和NSUserDefaults比起来 麻烦多了 (因为NSFileManage本来就挺复杂),但是问题是,NSUserDefaults本 身不支持自定义对象的存储,不过它支持NSData的类型,下面举一个例子来介 绍。我们先建立一个叫Student的类,这个类里有三个属

7、性(学号,性别),如图: / Created by lady-奕奕 on 14-7-24 ./ Copyri<yh.t (c) 2014 1 且dy奕奕 All eights reserved./I«import <Foundation/Foundation h>ginterzace Student : NSObjeerGproperry(monatomic ,rcrain) NSStrirg *rame;(property (nonatomic . retain) NSSrrirg *studentNurrt)er;(property (nonatomic , r

8、etain) NSSuxing *sex;Send我们要做的就是将Student类型变成NSData类型,那么就必须实现归档:这里要实现 在.h文件中申明NSCoding协议,再在.m中实现 encodeWithCoder 方法和initWithCoder方法就可以了 :h中修改文件如图/ Crea.ted. by lady-奕奕 on 14-7-24 ./ Copyright (c) 2014年 Indy-奕奕.All rights reserved. /import <Foundation/Fonndation h>(3Lnt.crrfaoo StudentSpropert:

9、y (non at omi c gproperty(nonatomic gproperty(nonatomic,retain),retain),rorain)NSObjzNSString *rame;NSString *studentNurrber;NSStrir:g *sex;Send.m中加入代码:/ Cr-eated by 丄ady-奕奕 on 14-7-24 ./ Copyright (e) 201.4年 lady-奕奕 All rights reserved./# import n5tudert .h"6 iir.plemcntation Scudenr|-(voi<

10、i) encodeWithCocier: (NSCoder *') aCoder aCodex encoaeObjecc: self;. narr.e forKey: g nnama n ;aCodex encodeOb jeuti: self studentunber f orKey : 3 HstudcntKurri>cr,r ;aCoder encodeObect: self sex f orKey : $ n sex,f ;-(id)initWithCoder: (NSCoder *)aDecoder(if (self = (super init)(self nani&#

11、169; 二 (aDecodcr decodeObjectForKey: G Hnr.cH ;self.sti;dentNiirr.ber = aDecoder decodeObjcctForKey:srudenrNurber'1 ; self.sex = (aDecoder decodeObjectrorKey;3nSn;Iret-urn self;end这样做就可以将自定义类型转变为NSData类型了2、将自定义类型数据存入NSUseiDefaults中如果要存储全班同学的信息,我们可以建一个NSMutableArray来存放全班 同学的信息(里面存储的全是NSData对象)在需要

12、存储的地方加入代码:首先,要建立一个可变数组来存储NSDate对象Stu de nt *stude nt = Student alloc ini;下面进行的是对student对象的name , studentNumber f sex的赋值stude = Jady-奕奕:student.studentNumber = ,3100104006u;student.sex ='女:这是一个存放全班同学的数组NSMutableArray * dataArray = NSMutableArray array With Cap acity: 50;将student类型变为NSData

13、类型NSData *data = NSKeyedArchiver archivedDataWithRo otObject:student;存放数据的数组将data加入进去dataArray addObject:data;如果你只想存一个人的信息,你可以直接将NSData存入NSUserDefmults中NSData *data = NSKeyedArchiver archivedDataWithRootObject:studen t;NSUserDefaults *user = NSUserDefaults standardUserDefaults;user setObject:data forKey:HoneStudent”;如果你想存储全班同学的信息,你还要用一个for循环将data放入dataArray 中,这里具体的操作就不实现了,只给出存放的代码:记住要转换成不可变数组类型NS Array * array = NSArray array With Array: dataArray;NSUserDefaults *user = NSUserDefaults standardUserDefaults;user setObject:array forKey:HallStudent”;从NSUserDefaults中取出数据在还原也很简单 例如还原一个学生的数据:NS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论