您的位置:首页 > 其它

数据在沙盒中存储的三种方法---plist存储,偏好设置存储,归档

2015-07-30 22:49 417 查看
    一:plist存储,存储在Caches文件夹下

    //存储的路径:
沙盒路径/Library/Caches文件/文件名

    // 1.plist存储,生成一个plist文件.

    // 2.plist不是数组就是字典,plist存储就是用来存储字典或者数组.

    //
注意:Plist不能存储自定义对象    

    //
创建数组
    NSArray *arr =
@[@"123",@1,@"abc"];

    

    //
存储数据,存储应用沙盒(应用的文件夹中)

    

    //
获取沙盒路径

    // NSLog(@"%@",NSHomeDirectory());

    //
直接应用沙盒中Caches文件路径

    // directory:获取哪个文件夹

    // domainMask:在哪个范围内搜索,NSUserDomainMask:表示在用户的手机上查找

    // expandTilde:是否展开全路径 YES:表示展开全路径 NO:不会展开全路径,会把应用沙盒的路径用波浪号(~)代替

    

    //
获取到Caches文件夹路径
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,
YES)[0];

    

    //
拼接文件名
    NSString *filePath = [cachePath stringByAppendingPathComponent:@"/arr.plist"];

    

    // File:文件的全路径
    [arr writeToFile:filePath atomically:YES];

二:偏好设置存储在Preferences文件夹下:

//存储的路径:
沙盒路径/Library/Preferences文件/文件名

// 偏好设置存储

// 好处:1>
不用关心文件路径

        2> 可以存储基本数据类型

        3> 快速进行键值对存储

// 获取偏好设置存储对象单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

// 存储对象
[userDefaults setObject:@5 forKey:@"age"];

// 存储基本数据类型
[userDefaults setInteger:10 forKey:@"num"];

三:归档

// 归档:存储自定义对象

// 存储路径:沙盒/temp文件名/文件名

// 创建person
Person *p = [[Person alloc] init];

p.age =
18;

p.name =
@"a";

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

// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];

// NSKeyedArchiver专门用来做自定义对象归档
[NSKeyedArchiver archiveRootObject:p toFile:filePath];

// p encodeWithCoder:

// 解档

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

// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];

// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

需给自定义的对象遵守NScode协议,并实现下面两个方法

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档

// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}

// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档

// 作用:告诉苹果当前对象中哪些属性需要解档

// initWithCoder什么时候调用:只要解析一个文件的时候就会调用

/ /    延伸:UIView遵守了NScoding协议:加载xib或者Story Board的控件的时候就会调用initWithCoder方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
// 当父类遵守了NScoding协议的时候需要调用父类的[super initWithCoder]方法

#warning  [super initWithCoder]
   
if (self = [super init]) {
       
// 解档

        //
注意一定要记得给成员属性赋值
        _name = [aDecoder decodeObjectForKey:@"name"];
        _age = [aDecoder decodeIntForKey:@"age"];
    }

    return
self;
}

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档

// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}

// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档

// 作用:告诉苹果当前对象中哪些属性需要解档

// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{

#warning  [super initWithCoder]
   
if (self = [super init]) {
       
// 解档

        //
注意一定要记得给成员属性赋值
        _name = [aDecoder decodeObjectForKey:@"name"];
        _age = [aDecoder decodeIntForKey:@"age"];
    }

    return
self;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  沙盒 plist 存储