ios存储 plist 偏好设置 自定义对象存储
1,plist
Plist注意:不能存储自定义对象
Plist:数组和字典,
如何判断一个对象能不能使用Plist,就看下有没有writeToFile
获取应用的文件夹(应用沙盒)
NSString* homePath=NSHomeDirectory();
获取temp
NSTemporaryDirectory();
获取Cache文件路径
NSSearchPathDirectory:搜索的目录
NSSearchPathDomainMask:搜索范围NSUserDomainMask表示在用户的手机上查找
expandTilde是否展开全路径,如果没有展开 应用沙盒的路径就~
存储一定要展开路径
获取文件存取路径,此处以cache为例
NSString* cachePath=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0];
拼接文件名称
NSString* filePath=[cachePath stringByAppendingPathComponent:@"personArr.plist"];
File:文件全路径 存
[arr writeToFile:filePath atomically:YES]
取
NSArray* arr=[NSArray arrayWithContentsOfFile:filePath];
//
// ViewController.m
// 05-PIist存储
//
// Created by xiaomage on 15/6/13.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #import "ViewController.h"
#import "Person.h" @interface ViewController () @end @implementation ViewController
// 点击存储的时候调用
- (IBAction)save:(id)sender {
Person *p = [[Person alloc] init];
// Plist注意:不能存储自定义对象
// Plist:数组和字典,
// 如何判断一个对象能不能使用Plist,就看下有没有writeToFile
NSArray *arr = @[@"",@,p]; // 获取应用的文件夹(应用沙盒)
// NSString *homePath = NSHomeDirectory(); // 获取temp
// NSTemporaryDirectory(); // 获取Cache文件路径
// NSSearchPathDirectory:搜索的目录
// NSSearchPathDomainMask:搜索范围 NSUserDomainMask:表示在用户的手机上查找
// expandTilde 是否展开全路径,如果没有展开,应用的沙盒路径就是~
// 存储一定要要展开路径
NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[]; // 拼接文件名
NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"]; NSLog(@"%@",cachePaht); // File:文件的全路径
[arr writeToFile:filePath atomically:YES]; } - (IBAction)read:(id)sender { NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[]; // 拼接文件名
NSString *filePath = [cachePaht stringByAppendingPathComponent:@"arr.plist"]; NSArray *arr = [NSArray arrayWithContentsOfFile:filePath]; NSLog(@"%@",arr); } - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
2偏好设置
好处:不用关心文件名称,快速做键值对存储,
底层:就是封装了一个字典
获取偏好设置对象
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
存
[userDefaults setObject:@"lxl" forKey:@"account"];
[userDefaults setBool:YES forKey:@"rmbPwd"];
iso7之前默认不会马上把缓存跟硬盘同步
要调用 [userDefaults synchronize];
默认生成一个plist文件 plist不能存自定对象
取
[userDefaults objectForKey:@"account"];
[userDefaults BoolForKey:@"rmbPwd"];
//
// ViewController.m
// 06-偏好设置
//
// Created by xiaomage on 15/6/13.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #import "ViewController.h" @interface ViewController () @end @implementation ViewController // 偏好设置存储:
// 好处:1.不需要关心文件名
// 2.快速做键值对存储 // 底层:就是封装了一个字典
// account:xmg pwd:123 rmbPwd:YES
- (IBAction)save:(id)sender { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:@"xmg" forKey:@"account"];
[userDefaults setObject:@"" forKey:@"pwd"];
[userDefaults setBool:YES forKey:@"rmbPwd"];
// 在iOS7之前,默认不会马上把跟硬盘同步
// 同步
[userDefaults synchronize]; }
- (IBAction)read:(id)sender {
NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"]; NSLog(@"%@",pwd); } - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
3自定义对象存储
获取文件路径
NSString * filePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0] stringByAppendingPathComponent:@"person.data"];
对象
Person* p=[[Person alloc]init];
存
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
取
Person* p=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
一个自定义对象想要归档需要实现协议NSCoding,并实现协议的2个方法
描述对象的那些属性归档
- (void)encodeWithCoder:(NSCoder *)aCoder;
描述对象的那些属性解档
- (id)initWithCoder:(NSCoder *)aDecoder;
实现initWithCoder注意如果当前自定义类的父类没有实现NSCoding协议就不能调用super initWithCoder:
而是调 super init
通过xib,storyboard创建的页面会调用initWithCoder
通过代码创建的页面会调用initWithFrame
//
// ViewController.m
// 07-自定义对象归档
//
// Created by xiaomage on 15/6/13.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #import "ViewController.h"
#import "Person.h" @interface ViewController () @end @implementation ViewController
- (IBAction)save:(id)sender { Person *p = [[Person alloc] init];
p.age = ; // 获取cache
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[]; // 获取文件的全路径
NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"]; // 把自定义对象归档
[NSKeyedArchiver archiveRootObject:p toFile:filePath]; }
- (IBAction)read:(id)sender { // 获取cache
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[]; // 获取文件的全路径
NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"]; // 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSLog(@"%d",p.age); } - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
//
// Person.h
// 07-自定义对象归档
//
// Created by xiaomage on 15/6/13.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #import <Foundation/Foundation.h> // 如果一个自定义对象想要归档,必须遵守NSCoding协议,实现协议方法。
@interface Person : NSObject<NSCoding>
@property (nonatomic, assign) int age;
@property (nonatomic, strong) NSString* name;
@end //
// Person.m
// 07-自定义对象归档
//
// Created by xiaomage on 15/6/13.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #import "Person.h" @implementation Person // 什么时候调用:自定义对象归档的时候 // 作用:用来描述当前对象里面的哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
// name
[aCoder encodeObject:_name forKey:@"name"]; // age
[aCoder encodeInt:_age forKey:@"age"]; } // 什么时候调用:解档对象的时候调用 // 作用:用来描述当前对象里面的哪些属性需要解档
// initWithCoder:就是用来解析文件的。
- (id)initWithCoder:(NSCoder *)aDecoder
{
// super:NSObject
#warning 什么时候需要调用initWithCoder
if (self = [super init]) { // 注意:一定要给成员变量赋值
// name
_name = [aDecoder decodeObjectForKey:@"name"]; // age
_age = [aDecoder decodeIntForKey:@"age"]; }
return self; } @end
ios存储 plist 偏好设置 自定义对象存储的更多相关文章
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...
- ios NSUserDefaults存储数据(偏好设置)
ios NSUserDefaults存储数据(偏好设置) 1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据包括:NSString, NSNumber, ...
- IOS第13天(2,私人通讯录,plist存储,偏好设置,归档)
***************plist存储 // 当点点击保存的时候调用 //保存 - (IBAction)save:(id)sender { // 获取沙盒的根路径 // NSString *ho ...
- iOS开发-本地存储(偏好设置,Plist,归档)
1. NSUserDefaults //TODO: 1.NSUserDefaults NSUserDefaults类除了可以存储数组.字典.NSdata外,还可以直接存储OC基本类型属性.但是不能 ...
- ios应用数据存储方式(偏好设置)-转
一.简单介绍 1.很多ios应用都支持偏好设置,比如保存用户名,密码,字体大小等设置,ios提供了一套标准的解决方案来为应用加入偏好设置功能. 2.每个应用都有个NSUserDefaults实例,通过 ...
- iOS 深拷贝、浅拷贝、自定义对象拷贝简介
copy语法的目的:改变副本的时候,不会影响到源对象: 深拷贝:内容拷贝,会产生新的对象.新对象计数器置为1,源对象计数器不变. 浅拷贝:指针拷贝,不会产生新的对象.源对象计数器+1. 拷贝有下面两个 ...
- IOS获取preferreces偏好设置plistname名称的方法
//获取preferreces偏好设置plistname名称的方法1 -(NSArray*)loadSpecifiersFromPlistName:(NSString*)plistName targe ...
- 数据存储之偏好设置NSUserDefaults
NSUserDefaults做数据存储也是比较常用,适合轻量级的本地数据存储,读取也很方便. 一.支持的数据类型如下图(NSString.NSArray.NSDictionary.NSData.NSI ...
随机推荐
- swift学习之一致性hash
转自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标 ...
- Android Studio工程导入另一个工程作为lib
简单视频应用开发时,使用Vitamio作为视频解码库,官方建议直接以工程作为lib方便升级,将该工程导入到项目时不知道该怎么做,参考了下面的博客,这里存档标记一下. 参考:导入一个Android St ...
- office在线预览方案
一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...
- 【转载】shell中的特殊变量$
shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...
- 题解西电OJ (Problem 1006 - 转盘游戏)--动态规划
题目链接 : http://acm.xidian.edu.cn/land/problem/detail?problem_id=1006 Description wm最近喜欢上一种无聊的转盘解锁游戏,他 ...
- Node.js中的ORM
ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款,具体介绍请猛击:https://github.com/dresende/node-orm2 刚接触Nod ...
- 把存储过程获取的数据输出到报表的html模板中
制作报表的html模板 <HTML><meta http-equiv="Content-Type" content="text/html; charse ...
- [Objective-c 基础 - 3.3] block数据类型
A.概念 1.block类似函数 (1)可以保存代码 (2)有返回值 (3)有形参 2.block的标志:^ // 没有参数和返回值的block void (^myblock)() = ^{ // ...
- 与IO相关的等待事件troubleshooting-系列9
Buffer Cache与IO相关的等待事件: 这种等待事件的产生原因是包含DBWR进程和IO Slaves的Buffer Cache操作. 'db file parallel write' , 'd ...
- UI基础 获取当前屏幕显示的viewcontroller
#pragma mark - 获取当前屏幕显示的viewcontroller - (UIViewController *)getCurrentVC { UIViewController *result ...