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 偏好设置 自定义对象存储的更多相关文章

  1. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

  2. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  3. ios NSUserDefaults存储数据(偏好设置)

    ios NSUserDefaults存储数据(偏好设置) 1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据包括:NSString, NSNumber, ...

  4. IOS第13天(2,私人通讯录,plist存储,偏好设置,归档)

    ***************plist存储 // 当点点击保存的时候调用 //保存 - (IBAction)save:(id)sender { // 获取沙盒的根路径 // NSString *ho ...

  5. iOS开发-本地存储(偏好设置,Plist,归档)

    1.   NSUserDefaults //TODO: 1.NSUserDefaults NSUserDefaults类除了可以存储数组.字典.NSdata外,还可以直接存储OC基本类型属性.但是不能 ...

  6. ios应用数据存储方式(偏好设置)-转

    一.简单介绍 1.很多ios应用都支持偏好设置,比如保存用户名,密码,字体大小等设置,ios提供了一套标准的解决方案来为应用加入偏好设置功能. 2.每个应用都有个NSUserDefaults实例,通过 ...

  7. iOS 深拷贝、浅拷贝、自定义对象拷贝简介

    copy语法的目的:改变副本的时候,不会影响到源对象: 深拷贝:内容拷贝,会产生新的对象.新对象计数器置为1,源对象计数器不变. 浅拷贝:指针拷贝,不会产生新的对象.源对象计数器+1. 拷贝有下面两个 ...

  8. IOS获取preferreces偏好设置plistname名称的方法

    //获取preferreces偏好设置plistname名称的方法1 -(NSArray*)loadSpecifiersFromPlistName:(NSString*)plistName targe ...

  9. 数据存储之偏好设置NSUserDefaults

    NSUserDefaults做数据存储也是比较常用,适合轻量级的本地数据存储,读取也很方便. 一.支持的数据类型如下图(NSString.NSArray.NSDictionary.NSData.NSI ...

随机推荐

  1. 从Decorator,Adapter模式看Java的IO库

    我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在 ...

  2. FZU 2216 The Longest Straight 二分

    0可以表示任何1到m的数,求一个最长的连续上升序列长度 因为m的范围在10w,所以以每个节点为起点 进行二分,复杂度mlogm 思路:b[i]表示到 1 到 i 有几个数没有出现,二分的时候注意加等号 ...

  3. 七牛上传Qt版本

    最近在找图床,写博客啥的需要.以前的图床好像挂了,搭在BAE上的图床也挂了,可能BAE3.0更新了吧. 花了点时间写了Qt版本 github地址:https://github.com/wzyuliya ...

  4. js特效第九天

    offset家族(获取元素尺寸) offsetWidth得到对象的宽度,自己的,与他人无关 offsetWidth = width+border+padding,不包含margin offsetHei ...

  5. unix 文件属性

    在unix下提到文件属性,不得不提的一个结构就是stat,stat结构一般定义如下: struct stat { dev_t st_dev; /* ID of device containing fi ...

  6. 部分常用Express方法详解

    app.set(name, value) 分配给name一个value,并将name作为app settings table的一个属性. 使用app.set('foo', true) 相当于调用 ap ...

  7. 教程-Delphi第三方控件安装卸载指南

    1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...

  8. 删除TreeView节点以及其子节点

    //1.删除TreeView节点以及其子节点procedure TForm2.Button1Click(Sender: TObject);var TreeNode:TTreeNode;begin  i ...

  9. .net iis 域名泛解析实战

    最近做个人网站想实现多个二级域名,一来为了好记,二来为了搜索引擎优化,搜索引擎对二级域名的收录还是比较快的.刚开始做了4,5个二级域名,每个都是在域名解析后台手动添加的,不过随着二级域名越来越多,发现 ...

  10. [OC Foundation框架 - 21] NSSet集合 & 集合之间的转换

    A.NSSet 跟NSArray一样,不可变 NSArray 自然顺序 NSSet是无序的 NSSet不允许存入重复元素,可以用来过滤重复元素   也有可变的NSMutableSet   B.集合转换 ...