数据存储-使用NSUserDefaults

两个类介绍:

NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。

NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型

NSKeyedUnarchiver类用于从文件(或者NSData指针)反归档模型。使用NSKeyedUnarchiver类来对数据进行归档和反归档。

一些函数介绍:

[NSKeyedUnarchiver unarchiveObjectWithData:data]//解码数据
[NSKeyedArchiver archivedDataWithRootObject:testObject];//编码数据 [[NSUserDefaults standardUserDefaults] objectForKey:key];//提取数据
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];删除数据
[[NSUserDefaults standardUserDefaults] setObject:data forKey:key];//储存数据
[dic writeToFile:plistPath atomically:YES]//将数据保存到文件
[NSDictionary dictionaryWithContentsOfFile:plistPath];//从文件中提取数据

用例子具体讲解数据存储

创建一个自定义类,并将这个类中的数据用NSUserDefault存放起来

让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法,然后把该自定义的类对象编码到NSData中(使用NSKeyedUnarchiver归档),再从NSUserDefaults中进行读取。

函数介绍:

encodeWithCoder:
//每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey方法归档实例变量。 initWithCoder:
//每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用encodeObject:forKey:方法解码实例变量。

代码如下:

自定义类编写代码:

#import <Foundation/Foundation.h>

@interface cardTest : NSObject

@property (nonatomic, assign) int testInt;
@property (nonatomic, strong) NSArray *testArray; @end
#import "cardTest.h"

@interface cardTest ()<NSCoding>

@end

@implementation cardTest

//解码函数
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.testArray = [aDecoder decodeObjectForKey:@"testArray"];
self.testInt = [aDecoder decodeIntForKey:@"testInt"];
}
return self;
} //编码函数
-(void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.testArray forKey:@"testArray"];
[aCoder encodeInt:self.testInt forKey:@"testInt"];
}
@end

储存类中的代码:

储存操作在- (void)viewDidLoad函数中进行

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end
#import "ViewController.h"
#import "cardTest.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 初始化
cardTest *testObject = [[cardTest alloc] init];
testObject.testInt = 8;
testObject.testArray = [NSArray arrayWithObjects:@"dslajjfds", @"aslkdfjasksdkfjasl", nil]; // 压缩数据
NSData *date = [NSKeyedArchiver archivedDataWithRootObject:testObject]; // 用NSUserDefaults储存数据
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:date forKey:@"cardTest_date"]; NSData *newdate;
cardTest *testObjectnew = [[cardTest alloc] init]; // 用NSUserDefaults获取数据
newdate = [ud objectForKey:@"cardTest_date"];
// 解压数据
testObjectnew= [NSKeyedUnarchiver unarchiveObjectWithData:newdate]; // 输出结果
NSLog(@"%d", testObjectnew.testInt);
NSLog(@"testArray = %@", testObjectnew.testArray); } @end

数据存储简单了解(NSUserDefaults)的更多相关文章

  1. iOS中的数据存储方式_Preference(NSUserDefaults)

    NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...

  2. IOS中的数据存储 简单总结

      1.  NSKeyedArchiver(加密形式)   2.  plist   3.  NSUserDefaults   4.  writeToFile    5.  SQLite3 ==== N ...

  3. iOS开发 - OC - 实现本地数据存储的几种方式一

    iOS常用的存储方式介绍 在iOS App开发过程中经常需要操作一些需要持续性保留的数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.本文针对OC中经常使用的一下存储方式做了个整理. 常用 ...

  4. iOS全埋点解决方案-数据存储

    前言 ​ SDK 需要把事件数据缓冲到本地,待符合一定策略再去同步数据. 一.数据存储策略 ​ 在 iOS 应用程序中,从 "数据缓冲在哪里" 这个纬度看,缓冲一般分两种类型. 内 ...

  5. IOS数据存储之NSUserDefaults

    前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...

  6. IOS中NSUserDefaults的用法(轻量级本地数据存储)

    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefa ...

  7. NSUserDefaults(数据存储)

    NSUserDefaults(数据存储)   NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下 ...

  8. iOS - OC NSUserDefaults 数据存储

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

  9. iOS - Swift NSUserDefaults 数据存储

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

随机推荐

  1. [css][移动设备]禁止横竖屏时内容自动调整

    参考:http://www.kankanews.com/ICkengine/archives/106643.shtml iOS下当竖屏转向横屏的时候,发现内容字体会自动变大,通过各种方法设置字体大小都 ...

  2. 快速访问WCF服务--ServiceModel 元数据实用工具 (Svcutil.exe)

    基本定义 ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档. SvcUtil.exe ServiceModel 元数据实用工具可在 Win ...

  3. PHP与MYSQL配合完成IP的存取

    如何存储IP 程序设计要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不可忽略的重要部分,巧存IP地址可以一定程度提升性能. 利用函数算法处理 MySQL没有直接提供IP类型字段,但有 ...

  4. AST抽象语法树

    抽象语法树简介 (一)简介 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并 ...

  5. java和javascript获取word文档的书签位置对比

    1.javascript:把IE浏览器的activex都打开,使用如下网页,可以看到书签顺序和位置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  6. ExtJs3常用控件操作实例

    结合工作内容,不定期更新.这里面可能会讲到一些常用的组件的操作. json: { "total": 30, "data": [{ "funcAlign ...

  7. Unity3d 读取网络xml

    Unity3d 读取网络xml Unity3d 读取网络xml,这个xml文件需要不包含BOM信息,可以用UltraEdit打开xml文件,并且另存为的时候,选择不包含BOM的utf-8格式存储!

  8. VIM default configuration

    == Vim的行号.语法显示等设置(.vimrc文件的配置) ==2008年01月18日 星期五 23:01 在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能 ...

  9. Expanding Rods(二分)

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10287   Accepted: 2615 Description When ...

  10. poj 2503 Babelfish(字典树哈希)

    Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 29059 Accepted: 12565 Description You hav ...