iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档
iOS应用数据存储的常用方式(持久化方式)
- 属性列表(plist)归档(XML文件)
- Preference(偏好设置)
- NSKeyedArchiver归档(NSCoding)
- SQLite3
- Core Data
- 属性列表(plist)归档(XML文件)
- 属性列表是一种XML格式的文件,拓展名为plist。
- 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中。
将一个NSDictionary对象归档到一个plist属性列表中
// 将数据封装成字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"阿三" forKey:@"name"];
[dict setObject:@"18959222222" forKey:@"phone"];
[dict setObject:@"20" forKey:@"age"];
1. 将字典持久化到Documents/stu.plist文件中(写入)[dict writeToFile:path atomically:YES];
成功写入到Documents目录下
2.读取字典属性列表路径的两种方法:
1).构造函数:
dict=[NSMutableDictionary alloc]initWithContentsOfFile: path];
2).静态创建工厂方法:
dict=[NSMutableDictionary dictionaryWithContentsOfFile: path];
读取数据
NSLog(@"name:%@", [dict objectForKey:@"name"]);
NSLog(@"phone:%@", [dict objectForKey:@"phone"]);
NSLog(@"age:%@", [dict objectForKey:@"age"]);
- Preference(偏好设置)
1、iOS应用都可以通过偏好设置来快速保存用户登陆账号,密码和登陆状态等等信息。
2、苹果提供了一个NSUserDefaults实例,通过它来存取偏好设置。保存格式为plist文件格式。
3、使用偏好设置来保存数据, 默认存储在Preferences的文件夹下,偏好设置数据会将所有的数据都保存到Preferences的文件夹下的同一个plist文件中。
4、使用偏好设置对数据进行保存, 它保存的时间是不确定的,会在将来某一时间自动将数据保存到Preferences文件夹下,如果需要即刻将数据存储,使用[defaults synchronize]。
1.保存偏好设置数据
// 获取NSUserDefaults对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 保存数据[defaults setObject:@" 阿三" forKey:@" name "];
[defaults setInteger:23 forKey:@" age"];
[defaults setDouble:1.73f forKey:@"height"];
// 强制让数据立刻保存[defaults synchronize];
2.读取偏好设置数据
// 获取NSUserDefaults对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 读取数据
NSString *test = [defaults objectForKey:@" name "];
NSInteger age=[defaults integerForKey:@"age"];
double height=[defaults doubleForKey:@"height"];
- NSKeydeArchiver归档
- 保存在Document文件夹
- 前面两种方式只能保存plist支持的基本数据类型,那么要保存自定义的类对象,苹果提供了NSKeydeArchiver归档。
- 使用NSKeydeArchiver归档必须使被归档的类遵守NSCoding协议并且实现协议方法。
@interface Person : NSObject <NSCoding>
// 当一个对象要保存到文件中的时候回调用如下方法,所以重写该方法,说明保存该对象的时候要保存哪些属性。
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
[aCoder encodeDouble:self.height forKey:@"height"];
}
// 当一个对象从文件中读取的时候,系统会调用该方法,重写该方法
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
if ([super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntForKey:@"age"];
self.height = [aDecoder decodeDoubleForKey:@"height"];
}
return self;
}
//将自定义的对象保存到文件中
[NSKeyedArchiver archiveRootObject:p1 toFile:path];
// 读取数据
Person *p2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];
通过NSKeydeArchiver保存的数据的文件后缀名可以任意命名,并且通过plist保存的数据是直接显示出来的,不安全。通过归档方法保存的数据在文件中打开是编码,更安全
iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档的更多相关文章
- iOS数据存储之属性列表理解
iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...
- 数据存储之属性列表Plist
常用的数据存储有属性列表.偏好设置.归档.sqlite.coreData.上一博客了解了沙盒,现在了解下属性列表Plist. 通常通过NSArray.NSDictionary集合类的WriteToFi ...
- 数据存储之plist、偏好设置
// 偏好设置--------------------------------- // 存储基本类型数据 NSUserDefaults *defaults = [NSUserDefaults stan ...
- 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数
一.利用Modal形式展示控制器 1.如何展示// vc就是要展示的新控制器[self presentViewController:vc animated:YES completion:^{ N ...
- iOS开发之数据存储之XML属性列表(plist)归档
1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...
- iOS开发之CoreData数据存储
iOS开发之CoreData数据存储 参考资料:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreD ...
- iphone开发中数据持久化之——属性列表序列化(一)
数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...
- iOS数据持久化存储之属性列表
属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary. ...
- Android 学习笔记之数据存储SharePreferenced+File
学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取... 一个应用程序,经常需要与用 ...
随机推荐
- Docker 容器中“TERM environment variable not set.”问题解决
在查容器内部资源利用情况时候,发现top命令无法使用,报错“TERM environment variable not set.”.从网上找到了解决方案,如下. [root@localhost ~]# ...
- css回忆(一)
1.css的引入方式: a) 在head部分加入<link rel="stylesheet" type="text/css" href="my ...
- 复旦大学2014--2015学年第二学期高等代数II期末考试情况分析
一.期末考试成绩班级前几名 钱列(100).王华(92).李笑尘(92).金羽佳(91).李卓凡(91).包振航(91).董麒麟(90).张钧瑞(90).陆毕晨(90).刘杰(90).黄成晗(90). ...
- 快速排序(python版)
#!coding:utf8 def quicksort(list_num, left, right): if left > right: return low = left high = rig ...
- 安装了ubuntu14.04+windows7双系统的笔记本启动后出现grub rescue>提示符
解决思想如下: 1.在grub rescue>提示符处输入ls 即可看到该命令列出了硬盘上的所有分区,找到安装了linux的分区,我的安装在(hd0,msdos8)下,所以我以(hd0,msd ...
- LTE Module User Documentation(翻译7)——无线环境地图(REM)、AMC 模型 和 CQI 计算
LTE用户文档 (如有不当的地方,欢迎指正!) 12 Radio Environment Maps 通过使用类 RadioEnvironmentMapHelper 是可能输出文件 Radio E ...
- js处理iframe中子页面与父页面里面对象的取得的解决方案
[1]子页面取得父页面的dom对象 parent.window.$('#id').val(""); [2]父页面取得子页面的对象 $(window.frames[&qu ...
- Python生成字体
Python version 2.7 required, which was not found in the registry 参考:http://www.cnblogs.com/min0208 ...
- $().on()
原文链接:http://www.365mini.com/page/jquery-on.htm 语法 jQuery 1.7 新增该函数.其主要有以下两种形式的用法: 用法一: jQueryObject. ...
- picasso-强大的Android图片下载缓存库
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! pica ...