三种数据存储 (plist,NSUserDefaults存储,NSKeyedArchiver存模型方法)

plist :一般存储一般对象:NSString,字典,数组,NSData

第一,首先要设置2个按钮,基本知识,就不在这写了,直接写按钮的触发事件来存储和读取

- (IBAction)save

{

// 1.获得沙盒根路径

NSString *home = NSHomeDirectory();

// 2.document路径

NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];

// 3.新建数据

NSArray *data = @[@"jack", @10, @"ffdsf"];

NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];

[data writeToFile:filepath atomically:YES];

}

//读取按钮

- (IBAction)read {

// 1.获得沙盒根路径

NSString *home = NSHomeDirectory();

// 2.document路径

NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];

// 3.文件路径

NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];

// 4.读取数据

NSArray *data = [NSArray arrayWithContentsOfFile:filepath];

NSLog(@"%@", data);

}

NSUserDefault存储

- (IBAction)save {

// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// 2.存储数据

[defaults setObject:@"mj" forKey:@"account"];

[defaults setObject:@"123" forKey:@"pwd"];

[defaults setInteger:10 forKey:@"age"];

[defaults setBool:YES forKey:@"auto_login"];

// 3.立刻同步

[defaults synchronize];

}

- (IBAction)read {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSString *account = [defaults objectForKey:@"account"];

BOOL autoLogin = [defaults boolForKey:@"auto_login"];

NSLog(@"%@ -- %d", account, autoLogin);

}

NSKeyedArchiver存model方法

一般存储模型对象  model类的对象,不能存储一般对象(字典,字符串,数组等)

新建2个模型

模型里面有对应的数据

MJStudent

#import <Foundation/Foundation.h>

@interface MJStudent : NSObject  <NSCoding>  //遵守NSCoding协议

@property (nonatomic, copy) NSString *no;

@property (nonatomic, assign) double height;

@property (nonatomic, assign) int age;

在.m文件

@interface MJStudent()

@end

@implementation MJStudent

/**重要

*  将某个对象写入文件时会调用

*  在这个方法中说清楚哪些属性需要存储

*/

//如果不写encoding方法,系统直接崩溃

//这个是保存数据的encoding方法

- (void)encodeWithCoder:(NSCoder *)encoder

{

[encoder encodeObject:self.no forKey:@"no"];

[encoder encodeInt:self.age forKey:@"age"];

[encoder encodeDouble:self.height forKey:@"height"];

}

/**重要

*  从文件中解析对象时会调用

*  在这个方法中说清楚哪些属性需要存储

*/

//这个是解析数据的方法

- (id)initWithCoder:(NSCoder *)decoder

{

if (self = [super init]) {

// 读取文件的内容

self.no = [decoder decodeObjectForKey:@"no"];

self.age = [decoder decodeIntForKey:@"age"];

self.height = [decoder decodeDoubleForKey:@"height"];

}

return self;

}

在viewcontroller里面

//保存数据按钮

- (IBAction)save {

// 1.新的模型对象

MJStudent *stu = [[MJStudent alloc] init];

stu.no = @"42343254";

stu.age = 20;

stu.height = 1.55;

// 2.归档模型对象

// 2.1.获得Documents的全路径

NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

// 2.2.获得文件的全路径

NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

// 2.3.将对象归档

[NSKeyedArchiver archiveRootObject:stu toFile:path];

}

//读取数据按钮

- (IBAction)read {

// 1.获得Documents的全路径

NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

// 2.获得文件的全路径

NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

// 3.从文件中读取MJStudent对象

MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);

}

时间: 2024-11-02 19:44:16

三种数据存储 (plist,NSUserDefaults存储,NSKeyedArchiver存模型方法)的相关文章

Windows Driver—IOCtl的三种数据交互方式(buffer,direct,other)

http://www.hgy413.com/1319.html 简介DeviceIoControl的三种通信方式 Windows Driver-IOCtl的三种数据交互方式(buffer,direct,other),布布扣,bubuko.com

JSON三种数据解析方法(转)

原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/oman001/article/details/79063278 引言 JSON数据现在是我们开发中用的最多的,百分之八十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,怎么快速解析它从而提升开发效率. 什么是JSON数据? 下面这里有一段JS

25-2 三种数据解析方式

引言:回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于requests模块发起请求 获取响应中的数据 数据解析

Excel应该这么玩——5、三种数据:Excel也是系统

Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据.在分析数据的过程中,除了用到根据实际情况变化的源数据,还存在不变的数据,例如各种比例.基数.基础信息,这里把这一类数据叫做基础数据.其实在业务系统中的数据也可以按这三种数据分类,只不过业务系统能提供友好的用户界面,Excel则完全面向数据.虽然Excel在用户界面上没法和业务系统相比,但对于数据的分类和处理

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过Session持久化操作,缓存中存在这个对象的数据为持久状态并且数据库中存在这个对象对应的数据为持久状态这个时候有OID. 游离状态:当Session关闭,缓存中不存在这个对象数据而数据库中有这个对象的数据并且有OID为游离状态. 注:OID为了在系统中能够找到所需对象,我们需要为每一个对象分配一个

大数据形势下的三种数据融合方式:组合、整合和聚合

一. 跨行业数据合作背景 国务院副总理马凯,曾经在2015贵阳国际大数据产业博览会中提到: 融合是大数据的价值所在,应大力推动大数据与产业融合,面向工业.交通.物流.商贸.金融.电信.能源等数据量大的行业领域,开展数据开发和交易,充分挖掘大数据的商业价值,促进产业提质增效升级. 另外,<大数据时代>的作者舍恩伯格,在该书中也提到一个观点:"大数据不是随机样本而是全体数据". 无论是从国家政府部门还是领域专家都不约而同的提到数据需要融合,数据融合才有价值. 二. 为什么需要数

EF的三种数据加载方式

EF中有3种数据加载方式,具体如下: 延迟加载(默认): 设置导航属性为virtual 贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include 显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()或Collection(对象集).Load() public class Programm { public static void Main() { TestDbContext db = new TestDbContext();

三种青年解决“跨线程访问窗口问题”的方法

最常见的情况就是把其它线程的文字加到listbox,总结了三种写法,由繁到简 1.普通青年:声明委托,调用委托,委托里调方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 delegate void AddListItemHandler(string str); private void SetText (string obj)  {             if (this.listBox1.InvokeRequired)             {

JS的三种使用方式/CSS的三种使用方式/JS中的DOM事件模型/JS中匿名函数的书写及调用/媒体查询@media的三种使用方式

一.JS的三种使用方式 1.html标签中内嵌JS(不提倡使用.)                <button onclick="javascript:alert('你真点啊.')" > 有本事点我呀!!!!</button>                                2.HTML页面中直接使用JS:                <script type="text/javascript">