码迷,mamicode.com
首页 > 移动开发 > 详细

IOS应用数据存储

时间:2015-07-10 23:36:04      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

IOS应用数据存储

常用方式

- XML属性列表(plist)归档
- Preference(偏好设置)
- NSKeyedArchiver归档(NSCoding)
- SQLite3 
- Core Data

应用程序沙盒

  • 每个应用程序都有自己的应用沙盒(应用沙盒就是文件系统目录)与其它文件系统隔离。应用必须呆在 自己的沙盒里,其它应用不能访问该沙盒
  • 应用沙盒目录<假设应用名字Layer> 
    技术分享
  • 技术分享

应用沙盒结构分析

技术分享

应用沙盒的常见获取方式

  • 沙盒根目录:NSString *home = NSHomeDirectory();

  • Documents:(2种方式) 
    -利用沙盒根目录拼接”Documents”字符串

NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];

// 不建议采用,因为新版本的操作系统可能会修改目录名 
利用NSSearchPathForDirectoriesInDomains函数

// NSUserDomainMask 代表从用户文件夹下找
// YES 代表展开路径中的波浪字符“~”
NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

// 在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素

NSString *documents = [array objectAtIndex:0];

属性列表

- 属性列表是一种XML格式的文件,拓展名为plist
- 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中
  • 假设存储一个数组 
    • 写入文件
 // directory:获取哪个文件夹 NSCachesDirectory,搜索caches文件
    // domainMask:获取哪个范围下文件夹 NSUserDomainMask,表示在当前用户下去搜索
    // expandTilde:是否展开全路径
    // 存放在/Library/Caches下
    //获取Caches文件夹的路径
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    // 拼接文件路径
    NSString *filePath =[cachesPath stringByAppendingPathComponent:@"user.plist"];

    /* *  写入文件  */
    [users writeToFile:filePath atomically:YES];
- 读取文件 
    /* *  读取文件   */
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    NSString *path =[cachesPath stringByAppendingPathComponent:@"user.plist"];
    NSArray *array =[NSArray arrayWithContentsOfFile:path];

    NSLog(@"%@",array);

偏好设置

/* *  NSUserDefaults用来专门做偏好设置存储*/
    /* *  优点:不需要关心文件名,系统会自动创建 用来快速做键值对的存储*/
    /* * 存放在 Library/Preferences 下 */
    /* *  存储  */
    [[NSUserDefaults standardUserDefaults]setObject:@"jack" forKey:@"account"];
    [[NSUserDefaults standardUserDefaults]setObject:@"123" forKey:@"pwd"];
    [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"login"];

    /* *  读取  */
    NSString *account =  [[NSUserDefaults standardUserDefaults]objectForKey:@"account"];
    BOOL login = [[NSUserDefaults standardUserDefaults]objectForKey:@"login"];
    NSString *pwd =  [[NSUserDefaults standardUserDefaults]objectForKey:@"pwd"];

    NSLog(@"%@,%d,%@",account,login,pwd );

归档

  • person对象
#import <Foundation/Foundation.h>
/* *  注意别写成NSCopying  */
@interface Person : NSObject<NSCoding>

/* * 年龄   */
@property (nonatomic,assign)NSInteger age;

/* * 名字   */
@property (nonatomic,strong)NSString *name;
/* *  解档属性  */
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning 只要父类遵守NSCodeing协议就会调用initWithCoder
    /* *  UIView在解析的时候就会调用initWithCoder 方法 */
    if (self = [super init]) {
        /* *  解档属性一定要保存到成员变量中  */
        _age =[aDecoder decodeIntegerForKey:@"age"];
        _name = [aDecoder decodeObjectForKey:@"name"];

    }
    return self;
}
/* *  告诉系统哪些对象需要归档  */
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInteger:_age forKey:@"age"];


}
  • 归档/解档

    /* *  归档:自定义对象想要存储到沙盒(文件夹)必须使用归档  */
     /* *  归档  */
    Person *person =[[Person alloc]init];
    person.age = 10;
    person.name = @"adobe";

    /* *  获取temp文件夹路径  */
    NSString *temp =NSTemporaryDirectory();

    /* *  读取document文件夹路径  */
    NSString *documentPath =NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask,YES)[0] ;
    /* *  拼接路径  */
    NSString *filePath =[temp stringByAppendingPathComponent:@"person.plist"];
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
 /* *  解档  */
    NSString *tempPath = NSTemporaryDirectory();
    /* *  拼接路径  */
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.plist"];
    Person *p =[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    NSLog(@"%@,%ld",p.name,p.age);

 

IOS应用数据存储

标签:

原文地址:http://www.cnblogs.com/sg6548676/p/4637630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!