美文网首页NetworkiOS开发 技术集锦奔跑吧 iOS
【Objective-C】请求数据放到Plist文件存到沙盒实现

【Objective-C】请求数据放到Plist文件存到沙盒实现

作者: 酷酷的小虎子 | 来源:发表于2016-06-27 08:48 被阅读1616次

    iOS应用数据存储的常用方式主要有:

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

    今天小主教大家最简单的本地存储方式
    大体的主要思路是我们通常用AFNetworking网络请求数据(返回结果一般是大字典),我们要在请求成功的Block中把请求回来的数据归档写入PList文件中,再在请求失败的Block里将数据反归档取出,再进行数据解析

    第一步:我们要封装归档反归档工具

    @interface ZHArchiverTools : NSObject
    //归档的工具方法
    + (void)archiverObject:(id)object ByKey:(NSString *)key
                  WithPath:(NSString *)path;
    
    + (id)unarchiverObjectByKey:(NSString *)key
                       WithPath:(NSString *)path;
    @end
    
    @implementation ZHArchiverTools
    + (void)archiverObject:(id)object ByKey:(NSString *)key WithPath:(NSString *)path
    {
        //初始化存储对象信息的data
        NSMutableData *data = [NSMutableData data];
        //创建归档工具对象
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        //开始归档
        [archiver encodeObject:object forKey:key];
        //结束归档
        [archiver finishEncoding];
        //写入本地
        NSString *docPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
        NSString *destPath = [[docPath stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:path];
    
        [data writeToFile:destPath atomically:YES];
    }
    
    + (id)unarchiverObjectByKey:(NSString *)key WithPath:(NSString *)path
    {
        NSString *docPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
        NSString *destPath = [[docPath stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:path];
        NSData *data = [NSData dataWithContentsOfFile:destPath];
        //创建反归档对象
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        //接收反归档得到的对象
        id object = [unarchiver decodeObjectForKey:key];
        return object;
    }
    @end
    (以上归档反归档可以直接封装到网络请求的工具类中,以网址为键)
    

    第二步:


    归档存数据

    第三步:


    反归档取数据

    断网打开APP,缓存完成

    相关文章

      网友评论

        本文标题:【Objective-C】请求数据放到Plist文件存到沙盒实现

        本文链接:https://www.haomeiwen.com/subject/efrhdttx.html