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 ...
随机推荐
- Servlet3.0学习总结(一)——使用注解标注Servlet
一.Servlet3.0介绍 Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述 ...
- yahoo 交易数据
yahoo提供国内和国外股市每天的交易数据资料,这可谓一大幸事啊.http://table.finance.yahoo.com/table.csv?s=ibm&d=6&e=22& ...
- jquery优化28个建议
我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...
- IGT一道笔试题
1到n连续的n个数 输入m 得出m个有序序列 比如 输入为n=5 ,m=3 则输出 543 542 541 532 531 521 432 431 421 321 当前长度为i,每个位上的取之范围为 ...
- oracle表分析
analyze table tablename compute statistics; analyze index indexname compute statistics; 对于使用CBO很有好处, ...
- oracle ref游标
Oracle 系列:REF Cursor 在上文 Oracle 系列:Cursor (参见:http://blog.csdn.net/qfs_v/archive/2008/05/06/240479 ...
- sql-表值函数tvf
带有参数的视图 create function fn_fenye (@count as int,@page as int) returns table as return select * from ...
- windows串口通信的一个活动图
1,打开串口的活动图: 2,关闭串口的活动图:
- TCP/IP模型的简单解释
TCP/IP模型是互联网的基础.想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大 ...
- nyoj 6 喷水装置(一)
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...